gentle-pi 2.4.0 → 2.6.0
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 +292 -25
- package/assets/agents/gentle-ai-worker.md +13 -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 +39 -11
- package/assets/orchestrator.md +5 -5
- 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 +65 -0
- package/docs/delegated-verification.md +25 -0
- package/docs/telemetry.md +94 -0
- package/docs/windows-startup-console-visibility.md +18 -0
- package/extensions/ask-user-choice.ts +159 -25
- package/extensions/codegraph-tools.ts +95 -5
- package/extensions/gentle-agents.ts +1337 -0
- package/extensions/gentle-ai.ts +2916 -386
- package/extensions/gentle-shell.ts +650 -0
- package/extensions/gentle-todo.ts +234 -0
- package/extensions/quiet-tools.ts +2 -1
- package/extensions/runtime-metrics.ts +130 -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 +315 -0
- package/lib/agents-history.ts +88 -0
- package/lib/agents-messaging.ts +187 -0
- package/lib/agents-protocol.ts +501 -0
- package/lib/agents-runner.ts +1012 -0
- package/lib/agents-thread-view.ts +57 -0
- package/lib/agents-transcript.ts +87 -0
- package/lib/agents-view-layout.ts +40 -0
- package/lib/agents-view.ts +914 -0
- package/lib/agents-widget.ts +241 -0
- package/lib/gentle-ai-binary.ts +3 -1
- package/lib/gentle-ai-renderer.ts +143 -25
- package/lib/native-choice-list.ts +194 -0
- package/lib/native-fullscreen-interaction.ts +47 -0
- package/lib/native-pointer-region.ts +164 -0
- package/lib/native-review-cli.ts +371 -13
- package/lib/orchestrator-presence.ts +337 -0
- package/lib/profiles-orchestrator.ts +203 -0
- package/lib/review-candidate-view-owner.ts +427 -0
- package/lib/review-candidate-view.ts +150 -48
- package/lib/review-consent-component.ts +247 -0
- package/lib/review-consent-ui.ts +110 -0
- package/lib/review-host-relay.ts +28 -0
- package/lib/review-integration-v2.ts +243 -11
- package/lib/review-last-event-controller.ts +8 -4
- package/lib/review-relay-contract.ts +11 -0
- package/lib/review-reminder-receipt.ts +74 -0
- package/lib/review-repository.ts +2 -2
- package/lib/review-risk-assessment.ts +339 -0
- package/lib/review-session-standing-permission-ipc.ts +309 -0
- package/lib/review-session-standing-permission.ts +240 -0
- package/lib/runtime-metrics-children.ts +199 -0
- package/lib/runtime-metrics-delivery.ts +68 -0
- package/lib/runtime-metrics-native.ts +166 -0
- package/lib/runtime-metrics-pi-identity.ts +113 -0
- package/lib/runtime-metrics-policy.ts +51 -0
- package/lib/runtime-metrics.ts +255 -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 +184 -0
- package/lib/shell-card.ts +133 -0
- package/lib/shell-changes-view.ts +530 -0
- package/lib/shell-changes.ts +290 -0
- package/lib/shell-gauge.ts +40 -0
- package/lib/shell-prompt.ts +115 -0
- 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 +297 -0
- package/lib/shell-usage-view.ts +76 -0
- package/lib/shell-usage.ts +246 -0
- package/lib/telemetry-trigger.ts +153 -0
- package/package.json +8 -5
- package/runtime/gentle-ai-binary.mjs +3 -1
- package/runtime/native-review-cli.mjs +370 -12
- package/runtime/review-integration-v2.mjs +243 -11
- package/runtime/review-relay-contract.mjs +11 -0
- package/runtime/review-risk-assessment.mjs +340 -0
- package/runtime/telemetry-trigger.mjs +154 -0
- package/scripts/build-runtime-modules.mjs +11 -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 +38 -2
- package/scripts/types-baseline.json +99 -0
- package/scripts/verify-package-files.mjs +8 -2
- package/skills/_shared/review-ledger-contract.md +20 -2
- 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 +205 -0
- package/tests/agents-fake-child.ts +66 -0
- package/tests/agents-grouping.test.ts +179 -0
- package/tests/agents-history.test.ts +54 -0
- package/tests/agents-integration.test.ts +100 -0
- package/tests/agents-messaging.test.ts +94 -0
- package/tests/agents-protocol.test.ts +198 -0
- package/tests/agents-queries.test.ts +190 -0
- package/tests/agents-responsive.test.ts +43 -0
- package/tests/agents-runner-process.test.ts +111 -0
- package/tests/agents-runner.test.ts +959 -0
- package/tests/agents-thread-view.test.ts +45 -0
- package/tests/agents-transcript.test.ts +30 -0
- package/tests/agents-view.test.ts +685 -0
- package/tests/agents-widget.test.ts +141 -0
- package/tests/artifact-language.test.ts +25 -2
- package/tests/ask-user-choice.test.ts +325 -5
- package/tests/asset-installation-runtime.test.ts +108 -0
- package/tests/autonomous-guard.test.ts +116 -1
- package/tests/codegraph-tools.test.ts +112 -2
- package/tests/delegated-key-learnings-contract.test.ts +1 -1
- package/tests/devbinary/native-review-parity.devtest.ts +110 -0
- package/tests/feature-request-form.test.ts +67 -0
- package/tests/fixtures/agents-messaging-child.mjs +5 -0
- package/tests/fixtures/agents-process-child.mjs +23 -0
- package/tests/fixtures/runtime-metrics-native-batches.json +6 -0
- package/tests/gentle-agents.test.ts +2168 -0
- 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 +103 -0
- package/tests/gentle-ai.test.ts +971 -15
- package/tests/gentle-card-text.ts +35 -0
- package/tests/gentle-shell.test.ts +818 -0
- package/tests/gentle-todo.test.ts +226 -0
- 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-choice-list.test.ts +202 -0
- package/tests/native-fullscreen-interaction.test.ts +125 -0
- package/tests/native-pointer-region.test.ts +245 -0
- package/tests/native-review-capability-contract.test.ts +27 -1
- package/tests/native-review-cli.test.ts +317 -3
- package/tests/native-review-consent.test.ts +91 -0
- package/tests/native-review-parity-runtime.test.ts +8 -2
- package/tests/native-review-parity.test.ts +43 -29
- package/tests/native-sdd-attempt-authority.test.ts +7 -2
- package/tests/orchestrator-budget.test.ts +69 -0
- package/tests/orchestrator-presence.test.ts +389 -0
- package/tests/orchestrator-rdd-ownership.test.ts +9 -0
- package/tests/package-manifest.test.ts +243 -7
- package/tests/profiles-orchestrator.test.ts +208 -0
- package/tests/quiet-tool-rendering.test.ts +97 -37
- package/tests/rdd-aware-verification-contract.test.ts +226 -0
- package/tests/rdd-status-line.test.ts +286 -0
- package/tests/review-agent-end-preflight.test.ts +332 -24
- package/tests/review-candidate-view.test.ts +751 -7
- package/tests/review-consent-ui.test.ts +352 -0
- package/tests/review-contract-prompt.test.ts +17 -0
- package/tests/review-controller-native-recovery.test.ts +29 -4
- package/tests/review-controller-native-routing.test.ts +884 -7
- package/tests/review-controller-workspace-root.test.ts +45 -2
- package/tests/review-controller.test.ts +26 -1
- package/tests/review-host-relay-restart-parity.test.ts +142 -1
- package/tests/review-host-relay-routing.test.ts +384 -8
- 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 +276 -0
- package/tests/review-last-event-closure.test.ts +112 -3
- package/tests/review-ledger-contract.test.ts +61 -6
- package/tests/review-relay-contract.test.ts +26 -0
- package/tests/review-reminder-receipt.test.ts +62 -0
- package/tests/review-repository.test.ts +28 -1
- package/tests/review-risk-assessment.test.ts +626 -0
- package/tests/review-session-standing-permission-controller.test.ts +656 -0
- package/tests/review-session-standing-permission-ipc.test.ts +233 -0
- package/tests/review-session-standing-permission-runtime.test.ts +212 -0
- package/tests/review-session-standing-permission.test.ts +156 -0
- package/tests/runtime-harness.mjs +447 -39
- package/tests/runtime-metrics-children.test.ts +206 -0
- package/tests/runtime-metrics-delivery.test.ts +85 -0
- package/tests/runtime-metrics-extension.test.ts +187 -0
- package/tests/runtime-metrics-native.test.ts +209 -0
- package/tests/runtime-metrics-pi-identity.test.ts +113 -0
- package/tests/runtime-metrics-policy.test.ts +62 -0
- package/tests/runtime-metrics.test.ts +184 -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-bar.test.ts +176 -0
- package/tests/shell-card.test.ts +139 -0
- package/tests/shell-changes-view.test.ts +609 -0
- package/tests/shell-changes.test.ts +350 -0
- package/tests/shell-prompt.test.ts +140 -0
- 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 +259 -0
- package/tests/shell-usage-view.test.ts +62 -0
- package/tests/shell-usage.test.ts +197 -0
- package/tests/startup-banner.test.ts +126 -0
- package/tests/telemetry-trigger.test.ts +351 -0
package/README.md
CHANGED
|
@@ -73,19 +73,44 @@ 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
|
+
| **Closed choice prompts** | Per-option hover/click/wheel in fullscreen; keyboard selection in either TUI mode. |
|
|
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. |
|
|
79
82
|
| **Reviewer protection** | Surfaces review workload risk before a task turns into an oversized PR. |
|
|
80
83
|
| **Per-agent model assignment** | Pi-native modal for assigning stronger or cheaper models to specific SDD/custom agents. |
|
|
81
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. |
|
|
82
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. |
|
|
83
86
|
| **Delivery skills** | Includes issue-first PRs, chained PRs, work-unit commits, cognitive docs, comment writing, and Judgment Day review. |
|
|
84
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. |
|
|
85
|
-
| **Verified native runtime** | Provisions the exact package-local Gentle AI v2.
|
|
88
|
+
| **Verified native runtime** | Provisions the exact package-local Gentle AI v2.8.0 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. |
|
|
86
89
|
| **Runtime safety** | Blocks destructive shell commands, asks for confirmation for sensitive operations, and blocks direct read/write/edit access to sensitive paths. |
|
|
87
90
|
|
|
88
|
-
|
|
91
|
+
## Native pointer regions
|
|
92
|
+
|
|
93
|
+
Compose pointer behavior around public `Text`, `Box`, or custom content without making it a keyboard target:
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
const scope = createNativePointerScope();
|
|
97
|
+
const openInput = scope.wrap(new Text("Open input", 0, 0), {
|
|
98
|
+
onClick: () => {
|
|
99
|
+
openInputEditor();
|
|
100
|
+
return { handled: true };
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
const panel = new Container();
|
|
104
|
+
panel.addChild(openInput);
|
|
105
|
+
const observer = scope.createMouseObserver(() => tui.requestRender());
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Pass `observer` around the root's native mouse dispatch; reuse `panel` as custom or overlay content.
|
|
109
|
+
Pointer input is fullscreen-only. Regions preserve a consuming child's native result and do not focus
|
|
110
|
+
`Text`, activate on press or wheel, synthesize outside leave events, or alter terminal tracking.
|
|
111
|
+
Callers own keyboard policy, theme state, and business actions.
|
|
112
|
+
|
|
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.
|
|
89
114
|
|
|
90
115
|
## Install
|
|
91
116
|
|
|
@@ -93,6 +118,14 @@ Most coding-agent sessions fail for operational reasons, not model reasons:
|
|
|
93
118
|
pi install npm:gentle-pi@0.14.0
|
|
94
119
|
```
|
|
95
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
|
+
|
|
96
129
|
### RDD version policy
|
|
97
130
|
|
|
98
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`.
|
|
@@ -105,17 +138,15 @@ pi install npm:gentle-pi@0.14.0
|
|
|
105
138
|
pi install npm:gentle-pi@latest
|
|
106
139
|
```
|
|
107
140
|
|
|
108
|
-
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.0; raw prerelease binaries only under a prerelease pin). Windows x64 and arm64 build the exact `v2.8.0` 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.
|
|
109
142
|
|
|
110
143
|
Recommended companion packages:
|
|
111
144
|
|
|
112
145
|
```bash
|
|
113
|
-
pi install npm:pi-subagents-j0k3r
|
|
114
146
|
pi install npm:pi-intercom
|
|
115
147
|
pi install npm:gentle-engram
|
|
116
148
|
pi install npm:pi-web-access
|
|
117
149
|
pi install npm:pi-lens
|
|
118
|
-
pi install npm:@juicesharp/rpiv-todo
|
|
119
150
|
pi install npm:@juicesharp/rpiv-ask-user-question
|
|
120
151
|
```
|
|
121
152
|
|
|
@@ -125,7 +156,7 @@ Then start Pi in a project:
|
|
|
125
156
|
pi
|
|
126
157
|
```
|
|
127
158
|
|
|
128
|
-
`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.
|
|
129
160
|
|
|
130
161
|
## Quick start
|
|
131
162
|
|
|
@@ -135,8 +166,10 @@ pi
|
|
|
135
166
|
/gentle:sdd-preflight Run or reuse the session SDD preflight explicitly.
|
|
136
167
|
/gentle-sdd-init Create or refresh openspec/config.yaml (openspec/both stores only).
|
|
137
168
|
/gentle:models Assign global model/effort routing to SDD/custom agents.
|
|
169
|
+
/gentle:profiles Create, switch, and manage global agent-model profiles.
|
|
138
170
|
/gentle:persona Switch between gentleman and neutral persona modes.
|
|
139
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).
|
|
140
173
|
/gentle:banner Configure startup rose, text logo, and color preset.
|
|
141
174
|
```
|
|
142
175
|
|
|
@@ -172,7 +205,7 @@ The goal is not ceremony. The goal is to avoid accidental chaos. Once a task sto
|
|
|
172
205
|
|
|
173
206
|
### Delegation triggers
|
|
174
207
|
|
|
175
|
-
`gentle-pi` keeps the parent session thin and delegates at the narrowest useful point. When the Pi Subagents extension is installed, the preferred runtime is the `subagent_*` tool family because it runs the user's configured project/global subagent definitions and preserves history/background behavior.
|
|
208
|
+
`gentle-pi` keeps the parent session thin and delegates at the narrowest useful point. When the Pi Subagents extension is installed, the preferred runtime is the `subagent_*` tool family because it runs the user's configured project/global subagent definitions and preserves history/background behavior. With the background policy on, delegations default to background mode: the terminal stays free and each result comes back as a message that starts a new turn; task mode is reserved for delegations that must ask the user something mid-flight. If those tools are unavailable, the parent should fall back to Pi's native `Agent` tool or another available delegation mechanism. The requirement is delegation; the runtime is capability-dependent.
|
|
176
209
|
|
|
177
210
|
| Trigger | Required behavior |
|
|
178
211
|
| --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
|
@@ -261,13 +294,13 @@ flowchart TD
|
|
|
261
294
|
|
|
262
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.
|
|
263
296
|
|
|
264
|
-
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.0 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.
|
|
265
298
|
|
|
266
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.
|
|
267
300
|
|
|
268
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.
|
|
269
302
|
|
|
270
|
-
Once the pinned gentle-ai runtime (currently v2.
|
|
303
|
+
Once the pinned gentle-ai runtime (currently v2.8.0) 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.
|
|
271
304
|
|
|
272
305
|
### FINALIZE wrapper input
|
|
273
306
|
|
|
@@ -291,6 +324,8 @@ This is the Pi wrapper contract, not the native CLI file contract. The native co
|
|
|
291
324
|
|
|
292
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.
|
|
293
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
|
+
|
|
294
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.
|
|
295
330
|
|
|
296
331
|
Actor output is untrusted data and cannot authorize transitions, fixes, receipts, gates, or delivery.
|
|
@@ -325,9 +360,11 @@ Judgment Day alone may iterate discovery and scoped re-judgment, for at most two
|
|
|
325
360
|
|
|
326
361
|
Findings surviving round two escalate; no third-round transition exists.
|
|
327
362
|
|
|
328
|
-
Native review mode and candidate
|
|
363
|
+
Native review mode and the two candidate choices remain provider-owned lifecycle semantics. For a validated `consent/v3` envelope in the interactive parent TUI, Pi displays those two choices unchanged and adds a clearly separate host-owned action: **Run this review and allow reviews for this Pi session**. Only direct human selection creates this process-memory grant. Its scope is the coordinating live SessionManager session and the canonical Git common-directory identity of the selected repository: it runs the current envelope's exact provider `granted` invocation through the existing one-shot `answer-consent` path, then does the same for later fresh validated envelopes in sibling worktrees of that same clone, including package-owned children. An unrelated repository requires a separate explicit human grant. Reload preserves it; `/tree` retains it; revoke removes the current repository grant; quit, new, resume, fork, or process restart removes all session grants. The command's `status` action reports the in-memory state without changing provider mode or authority.
|
|
364
|
+
|
|
365
|
+
The host grant is held only in a schema-checked `globalThis[Symbol.for(...)]` WeakMap registry keyed by session and canonical Git common-directory digest. It is never written through session entries, settings, environment variables, or the old asked latch. A package-owned Gentle Agents child can request one bounded parent-owned stdio authorization for its own validated pending ordinary START; it sends only that target's canonical repository digest, and the parent rechecks the live task, digest, and current parent session grant before the child replays its exact provider grant locally. No candidate bytes, provider vectors, paths, local child grant, or delivery authority crosses that channel. External or legacy `pi-subagents` launchers do not receive this channel and remain unsupported. Headless/RPC/unsupported UI, external processes, model prose, tool arguments, cancellation, identity drift, malformed identity, and uncertain native results cannot create or consume the grant. Native workspace binding remains canonical and target-specific; session-wide consent never authorizes an unselected target or an unrelated repository. The grant conveys no review verdict, forecast/cost approval, acknowledgement, maintenance, delivery, or cross-repository authority. When the host cannot resolve the choice, `gentle_review` returns the original unresolved two-choice provider envelope unchanged for the normal lossless relay. SessionManager binding isolates simultaneous SDK sessions; Pi does not claim universal same-process agent-principal isolation because the SDK exposes no principal identity.
|
|
329
366
|
|
|
330
|
-
When RDD is on and an agent loop ends with an unreviewed candidate, `gentle-pi` sends one read-only reminder pointing the agent back to `gentle_review {"operation":"inspect"}` before it reports completion. This nudge is idempotent (at most once per target identity per session), never fires for a headless session or a subagent's own loop, and never runs START or answers consent itself. At session start, `gentle-pi` records the current target identity as a baseline, so a candidate that already existed before the session began (the user's own prior work, not this session's output) never draws the reminder.
|
|
367
|
+
When RDD is on and an agent loop ends with an unreviewed candidate, `gentle-pi` sends one read-only reminder pointing the agent back to `gentle_review {"operation":"inspect"}` before it reports completion. This nudge is idempotent (at most once per target identity per session), never fires for a headless session or a subagent's own loop, and never runs START or answers consent itself. Pi treats a child `agent_end` as a latest-answer update, not completion: queued retry, compaction, follow-up, required verification, and legitimate post-correction verification remain live until `agent_settled`. It does not claim ready or RDD-ready first, but this ordering rule does not impose a universal full-suite requirement or turn a receipt into a delivery gate. At session start, `gentle-pi` records the current target identity as a baseline, so a candidate that already existed before the session began (the user's own prior work, not this session's output) never draws the reminder.
|
|
331
368
|
|
|
332
369
|
Review outcomes and receipt state are informational; commit, push, pull-request, and release delivery follow ordinary repository policy. No one-shot command authorization, publication-target revalidation, or receipt gate is required for delivery, and Pi does not inspect RDD mode or native authority to decide a Bash delivery command.
|
|
333
370
|
|
|
@@ -416,7 +453,7 @@ Engram-only mode is different by design: Engram is working memory and does not m
|
|
|
416
453
|
|
|
417
454
|
## SDD preflight and project files
|
|
418
455
|
|
|
419
|
-
`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.
|
|
420
457
|
|
|
421
458
|
```text
|
|
422
459
|
~/.pi/agent/agents/sdd-*.md
|
|
@@ -424,16 +461,30 @@ Engram-only mode is different by design: Engram is working memory and does not m
|
|
|
424
461
|
~/.pi/agent/gentle-ai/support/strict-tdd*.md
|
|
425
462
|
```
|
|
426
463
|
|
|
427
|
-
|
|
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.
|
|
428
465
|
|
|
429
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.
|
|
430
467
|
|
|
431
|
-
|
|
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:
|
|
432
469
|
|
|
433
470
|
```text
|
|
471
|
+
/gentle:install-delegation --force
|
|
472
|
+
/gentle:install-review --force
|
|
434
473
|
/gentle:install-sdd --force
|
|
435
474
|
```
|
|
436
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
|
+
|
|
437
488
|
Manual preflight command:
|
|
438
489
|
|
|
439
490
|
```text
|
|
@@ -543,8 +594,7 @@ A project can still override the global default with:
|
|
|
543
594
|
The modal discovers:
|
|
544
595
|
|
|
545
596
|
- project agents in `.pi/subagents/`, `.pi/agents/`, and `.agents/`;
|
|
546
|
-
- user agents in `~/.pi/agent/subagents/`, `~/.pi/agent/agents/`, and `~/.agents
|
|
547
|
-
- built-in agents from `pi-subagents-j0k3r` when present.
|
|
597
|
+
- user agents in `~/.pi/agent/subagents/`, `~/.pi/agent/agents/`, and `~/.agents/`.
|
|
548
598
|
|
|
549
599
|
When applying routing, project agents write runtime profiles to `.pi/subagents.json`; global and built-in agents write profiles to `~/.pi/agent/subagents.json`.
|
|
550
600
|
|
|
@@ -584,26 +634,227 @@ Config shape (per agent):
|
|
|
584
634
|
|
|
585
635
|
Legacy string entries are still accepted and treated as `model`-only config.
|
|
586
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
|
+
|
|
698
|
+
## Gentle Shell
|
|
699
|
+
|
|
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.
|
|
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
|
+
|
|
706
|
+
The status bar replaces pi's three-line footer with a single line of segments:
|
|
707
|
+
|
|
708
|
+
```text
|
|
709
|
+
✿ gentle-pi ⟡ ~/work/gentle-pi main ⟡ gpt-5.5 · medium ⟡ ctx ▰▰▰▰▱▱▱▱ 45% ⟡ $9.49 sub ⟡ MCP: 3 servers enabled Release notes
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
- Context is a gauge, not a number. It turns amber at 80% and red at 95%; after compaction it shows `?%` until the next response.
|
|
713
|
+
- Cost carries `sub` when the active model runs on a subscription login.
|
|
714
|
+
- Statuses other extensions publish through `setStatus` are appended as trailing segments; the session name sits at the right edge.
|
|
715
|
+
- On narrow terminals the session name is dropped first, then trailing segments, before the line is truncated.
|
|
716
|
+
|
|
717
|
+
The prompt wraps pi's editor in a rounded frame with a petal that shows what the agent is doing:
|
|
718
|
+
|
|
719
|
+
```text
|
|
720
|
+
╭─ ✿ working ──────────────────────────────────────────╮
|
|
721
|
+
│ type, or / for commands │
|
|
722
|
+
╰──────────────────────────────────────────────────────╯
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
- The petal is still while pi waits, spins with a `working` label while the agent works, and turns amber with a `queued` label when messages are waiting behind the current turn. pi's own "Working" row above the editor is hidden, since the frame already says it.
|
|
726
|
+
- The frame uses the theme's border color over the panel background, so the prompt reads as one panel with the cards around it; the editor's scroll indicators stay inside the frame.
|
|
727
|
+
- The hint appears only while the editor is empty.
|
|
728
|
+
- If another extension already installed a custom editor, Gentle Shell leaves it alone.
|
|
729
|
+
|
|
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:
|
|
731
|
+
|
|
732
|
+
```text
|
|
733
|
+
✎ 3 files · +42 −7 · extensions/gentle-shell.ts, lib/shell-bar.ts, tests/x.test.ts · /gentle:changes
|
|
734
|
+
```
|
|
735
|
+
|
|
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.
|
|
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.
|
|
741
|
+
- On narrow terminals the file list is dropped before the summary is truncated.
|
|
742
|
+
|
|
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.
|
|
744
|
+
|
|
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.
|
|
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.
|
|
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.
|
|
751
|
+
- Untracked files are diffed against an empty file so new files show their full content.
|
|
752
|
+
|
|
753
|
+
Subscription usage shows in the bar after the cost, and `/gentle:usage` opens a panel with every window per provider:
|
|
754
|
+
|
|
755
|
+
```text
|
|
756
|
+
✿ gentle-pi ⟡ … ⟡ $9.49 sub ⟡ codex 5h ▰▰▰▰▰▱▱▱ 62% · week 31%
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
- For Codex, usage comes from the same account usage endpoint the Codex CLI reads, using the OAuth token pi already holds. It is fetched at session start, at most every 5 minutes after a turn, and on `r` in the panel. Rate-limit headers on SSE responses are picked up too.
|
|
760
|
+
- For Claude Pro/Max, usage arrives in the rate-limit headers of every response, so the 5h and weekly windows appear after the first turn.
|
|
761
|
+
- The bar names the subscription it shows (`codex`, `claude`) and always follows the active model. The panel puts the active provider first, marked with the petal, and says why it has no data when it does not: API-key providers have no subscription windows, Claude reports after the first response, Codex waits for a fetch.
|
|
762
|
+
- Only the plan name and the windows are kept; account details in the payload are discarded.
|
|
763
|
+
- Gauges turn amber at 80% and red at 95%, like the context gauge.
|
|
764
|
+
|
|
765
|
+
Gentle notices are drawn as cards: the same rounded frame as the prompt, with the left rail and the title in the tone of the notice and the rest of the frame in the theme's border color.
|
|
766
|
+
|
|
767
|
+
```text
|
|
768
|
+
╭─ ✿ Gentle AI · review preflight ─────────────────────────────────────╮
|
|
769
|
+
│ Receipt-driven development is enabled, and this worktree holds an… │
|
|
770
|
+
╰──────────────────────────────────────────────────────────────────────╯
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
- Every call into the gentle-ai binary and every `gentle_review` tool renders as a card under the rose, `🌹︎ Gentle AI`: the rail is amber while it runs, green when it finished, red when it failed; the expand key sits in the top rule once the tool finished, and the collapsed result shows only its line count. Reviewer captures name their lens (`review capture · risk`; the group lists all four).
|
|
774
|
+
- The review preflight reminder renders as a card in the transcript with the expand key in its top rule.
|
|
775
|
+
- An active dev-binary override shows above the editor at startup, in amber, naming the binary and its digest, and leaves with the first prompt; an invalid override shows in red with the reason.
|
|
776
|
+
- Subagents draw their own card; see Gentle Agents below.
|
|
777
|
+
|
|
778
|
+
### Gentle Agents
|
|
779
|
+
|
|
780
|
+
The current package requires Pi 0.85.1 or newer (development tests pin 0.85.1). Use the latest Pi release; gentle-pi does not update your installed Pi automatically. Children, including any `GENTLE_PI_AGENTS_PI` override, must emit `agent_settled`: `agent_end` records a run's output but is not completion because retries or queued continuations may follow.
|
|
781
|
+
|
|
782
|
+
The `subagent_*` tools and the agents card replace the third-party subagents package (remove `npm:pi-subagents-j0k3r` from your pi packages; while it is still installed the tools stay unregistered and a warning says so at startup). Agent definitions and settings are the ones you already have: markdown agents in `~/.pi/agent/agents/`, `~/.pi/agent/subagents/`, `<cwd>/.pi/agents/`, `<cwd>/.pi/subagents/` (project beats global, `subagents/` beats `agents/`), and `subagents.json` at the global and project level (`default_model`, `default_effort`, `default_mode`, `model_profiles`, `stall_timeout_ms`, `max_concurrency`, `history_max_tasks`).
|
|
783
|
+
|
|
784
|
+
Agent paths follow `GENTLE_PI_AGENT_HOME`, then `PI_CODING_AGENT_DIR`, then `~/.pi/agent` for definitions, config, history, child sessions, and transcripts. These overrides select the agent profile; they do not sandbox project or shared global resources.
|
|
785
|
+
|
|
786
|
+
```text
|
|
787
|
+
╭─ ❀ Agents · 1 active · 1 done ─────────────────────────────── 1m24s ╮
|
|
788
|
+
│ ✓ sdd-explore map footer data sources gpt-5.6-terra · 34k · $0.27 · 25s │
|
|
789
|
+
│ ◐ sdd-apply write gentle-shell footer gpt-5.6-terra · 12k · $0.09 · 41s │
|
|
790
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
791
|
+
```
|
|
792
|
+
|
|
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.
|
|
794
|
+
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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/`.
|
|
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.
|
|
809
|
+
|
|
810
|
+
### Gentle Todo
|
|
811
|
+
|
|
812
|
+
The `todo` tool and its card replace the third-party todo extension (remove `npm:@juicesharp/rpiv-todo` from your pi packages; sessions written by it replay into the new card).
|
|
813
|
+
|
|
814
|
+
```text
|
|
815
|
+
╭─ ❀ Todos · 1 of 3 ──────────────────────────────────────╮
|
|
816
|
+
│ ✓ Add quiet tool rendering │
|
|
817
|
+
│ ◐ Fix quiet tools conflict · fixing conflict │
|
|
818
|
+
│ ○ Show git bash tails │
|
|
819
|
+
╰─────────────────────────────────────────────────────────╯
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
Three things keep the list current, which a static tool description cannot:
|
|
823
|
+
|
|
824
|
+
- `write` replaces the whole list in one call, so the model rewrites the plan instead of patching it; `add`, `update`, `clear`, and `list` remain for single moves.
|
|
825
|
+
- Every turn's system prompt carries the open tasks and the rules: in_progress before starting, done right after finishing, update before ending the turn.
|
|
826
|
+
- A list that goes two turns untouched while tasks stay open turns amber with `stale · N turns`, and the prompt says so, so the model brings it up to date.
|
|
827
|
+
|
|
828
|
+
A finished list stays on screen for the turn it finished in and clears at the next. `ctrl+shift+t` collapses the card to the task in progress (`GENTLE_PI_TODO_KEY` rebinds it, `off` disables it); `GENTLE_PI_TODO=0` disables the tool and the card.
|
|
829
|
+
|
|
830
|
+
Set `GENTLE_PI_SHELL=0` to keep pi's built-in footer and editor.
|
|
831
|
+
|
|
587
832
|
## Commands
|
|
588
833
|
|
|
589
834
|
| Command | What it does |
|
|
590
835
|
| -------------------------------- | ------------------------------------------------------------------- |
|
|
591
836
|
| `/gentle:status` | Shows package, SDD asset, OpenSpec, and global model config status. |
|
|
592
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. |
|
|
593
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. |
|
|
594
841
|
| `/gentle:persona` | Switches global persona mode, with project override support. |
|
|
595
842
|
| `/gentle:background-subagents` | Shows or sets the managed background-subagents policy (`status\|enable\|disable`), naming the source that decided it. |
|
|
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. |
|
|
596
845
|
| `/gentle:banner` | Configures startup banner rose, text logo, and color preset. |
|
|
597
846
|
| `/gentle:toggle-rose` | Toggles the startup rose. |
|
|
598
847
|
| `/gentle:toggle-text-logo` | Toggles the startup text logo. |
|
|
599
848
|
| `/gentle:banner-color` | Selects a startup banner color preset. |
|
|
600
849
|
| `/gentle-sdd-init` | Initializes or refreshes `openspec/config.yaml` (openspec/both stores only). |
|
|
601
|
-
| `/gentle:install-
|
|
602
|
-
| `/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. |
|
|
603
854
|
| `/skill-registry:refresh` | Regenerates `.atl/skill-registry.md`. |
|
|
604
855
|
| `/skill-creation` | Creates or updates an LLM-first skill using the packaged `gentle-ai-skill-creator` contract and style guide. |
|
|
605
856
|
|
|
606
|
-
|
|
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.
|
|
607
858
|
|
|
608
859
|
### Background subagents policy
|
|
609
860
|
|
|
@@ -626,9 +877,9 @@ Four sources can decide the policy, and the first hit wins:
|
|
|
626
877
|
|
|
627
878
|
Both files use the strict shape `{"schema":"gentle-pi.background-subagents/v1","policy":"on"}`. A file that is present but malformed fails closed to `off` and is **not** skipped in favor of a lower-priority source, so a typo in the project file disables background subagents rather than silently handing the decision to the global file. The command reports that case as a warning instead of an ordinary `off`.
|
|
628
879
|
|
|
629
|
-
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 the subagents package is
|
|
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.
|
|
630
881
|
|
|
631
|
-
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.
|
|
632
883
|
|
|
633
884
|
Startup flag:
|
|
634
885
|
|
|
@@ -670,11 +921,27 @@ Memory contract for SDD delegation:
|
|
|
670
921
|
- subagents should save significant discoveries, decisions, bug fixes, and completed SDD phase artifacts before returning when memory tools are available;
|
|
671
922
|
- in memory/hybrid mode, SDD artifacts use stable topic keys such as `sdd/<change>/proposal`, `sdd/<change>/spec`, `sdd/<change>/design`, `sdd/<change>/tasks`, `sdd/<change>/apply-progress`, and `sdd/<change>/verify-report`.
|
|
672
923
|
|
|
924
|
+
## Telemetry
|
|
925
|
+
|
|
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.
|
|
927
|
+
|
|
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.
|
|
929
|
+
|
|
930
|
+
Install counts for `gentle-pi` and `gentle-engram` come from npm download statistics; the package itself never emits an install event.
|
|
931
|
+
|
|
932
|
+
To opt out:
|
|
933
|
+
|
|
934
|
+
- `/gentle:telemetry disable` — asks the local `gentle-ai` binary to disable telemetry (also `status` and `preview` to inspect it without leaving Pi).
|
|
935
|
+
- `DO_NOT_TRACK=1` — Gentle Pi suppresses runtime usage telemetry and the install/heartbeat trigger; `gentle-ai` also honors this standard independently.
|
|
936
|
+
- `GENTLE_AI_TELEMETRY=0` — same effect, `gentle-ai`'s own environment switch.
|
|
937
|
+
|
|
938
|
+
`CI=true` also suppresses runtime usage telemetry and the trigger, since automated runs are not a real usage signal.
|
|
939
|
+
|
|
673
940
|
## Package contents
|
|
674
941
|
|
|
675
942
|
| Path | Purpose |
|
|
676
943
|
| ------------------------------ | ---------------------------------------------------------------------------------------------------------- |
|
|
677
|
-
| `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. |
|
|
678
945
|
| `lib/native-review-cli.ts` | Strict package-local adapter for Gentle AI START, FINALIZE, VALIDATE, SDD binding, and status contracts. |
|
|
679
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). |
|
|
680
947
|
| `lib/review-candidate-view.ts` | Builds immutable changed-scope actor views while preserving full-tree, path, mode, symlink, and index integrity. |
|
|
@@ -684,7 +951,7 @@ Memory contract for SDD delegation:
|
|
|
684
951
|
| `scripts/gentle-ai-installer.mjs` | Installs signed Darwin/Linux archives or exact Go SumDB-verified Windows source builds into the package-local runtime. |
|
|
685
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. |
|
|
686
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. |
|
|
687
|
-
| `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. |
|
|
688
955
|
| `extensions/sdd-init.ts` | Registers `/gentle-sdd-init` for OpenSpec initialization. |
|
|
689
956
|
| `extensions/skill-registry.ts` | Maintains `.atl/skill-registry.md` from project/user skills and closes file watchers on shutdown. |
|
|
690
957
|
| `assets/orchestrator.md` | Parent-session orchestration contract (always-on core). |
|
|
@@ -692,7 +959,7 @@ Memory contract for SDD delegation:
|
|
|
692
959
|
| `assets/orchestrator-memory.md` | Lazy-loaded SDD memory phase table, artifact keys, and lifecycle rule. |
|
|
693
960
|
| `assets/orchestrator-skills.md` | Lazy-loaded skill registry fallback semantics and intent-driven skill discovery. |
|
|
694
961
|
| `assets/sdd-orchestrator-workflow.md` | Lazy-loaded SDD workflow surface for the parent orchestrator. |
|
|
695
|
-
| `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. |
|
|
696
963
|
| `assets/chains/` | SDD chains installed as global Pi runtime assets. |
|
|
697
964
|
| `assets/support/` | Strict TDD support docs for apply/verify phases. |
|
|
698
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:
|
|
@@ -63,6 +67,15 @@ RED/GREEN evidence is required only when the parent explicitly activates strict
|
|
|
63
67
|
|
|
64
68
|
Run focused tests first. Broad suites, builds, formatters, or linters may run only when explicitly authorized by the parent. Keep every command exact and verify its scope before execution. Do not claim completion while required validation is failing.
|
|
65
69
|
|
|
70
|
+
## Verification
|
|
71
|
+
|
|
72
|
+
When the parent task carries a `## Verification` heading, that heading is the delegated verification contract for this task (gentle-pi#661, RDD-aware pilot):
|
|
73
|
+
|
|
74
|
+
- Run every command listed under it exactly as written, one at a time, in the foreground. Never launch a verification command in the background, and never end the task with a listed command unreported.
|
|
75
|
+
- Report each one as `<exact command>: <observed result>` in `validation`.
|
|
76
|
+
- `## Known environmental failures` in the parent task (this is the canonical definition; other assets reference it, they do not restate it) lists exact test names or exact command lines that already fail on the base, before this task's changes. Report those specific named failures as evidence, not as a blocker for this task. Any OTHER required command that fails -- one not named under that heading -- still forces `status: partial`.
|
|
77
|
+
- When receipt-driven development is on, this report is the verification of record for the change, and the native review remains the independent check the writer cannot influence: never report `status: completed` while a required command under `## Verification` is failing, unless that exact failure is named under `## Known environmental failures`.
|
|
78
|
+
|
|
66
79
|
## Interaction contract
|
|
67
80
|
|
|
68
81
|
When any human input is required, stop editing and return the full schema in the Return contract with `status: interaction_required` and the nested `interaction_required` payload completed. Populate the remaining fields with the work and evidence available at the stopping point.
|
|
@@ -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
|
|