Before submitting
Problem
When Pi runs with the claude-bridge provider (pi-claude-bridge), none of the gentle-pi harness text reaches the model. This covers the ODD protocol, the identity contract, the persona, the RDD status line, and the research capabilities block. The session looks normal, and gentle-pi tools such as subagent_run, gentle_review, and orchestrator_* all work. The model simply never receives "Default workflow: Organic Driven Development (MANDATORY)".
Root cause:
- gentle-pi injects its harness by returning
systemPrompt: event.systemPrompt + gentlePrompt + … from before_agent_start (extensions/gentle-ai.ts, around line 9156; buildGentlePrompt inlines assets/orchestrator.md).
pi-claude-bridge 0.8.0 does not forward that assembled prompt. It records event.systemPromptOptions and sends Claude Code the claude_code preset, appending only the portable parts: context files, the skills block, customPrompt, and appendSystemPrompt (src/prompt-capture.ts, projectCapture; src/index.ts, systemPrompt: { type: "preset", preset: "claude_code", append }).
- Anything an extension appends through the
before_agent_start return value is dropped without any warning. A bridge comment suggests this is deliberate: shipping Pi's harness verbatim trips Anthropic's third-party plan-eligibility check.
Impact: the only gentle-pi guidance that survives is the skills block. In that block, skills/gentle-ai/SKILL.md still says large / ambiguous / risky → SDD and never mentions ODD (see #1085). Under claude-bridge, that stale skill becomes the sole workflow contract. In my session, the agent answered "apply ODD" by creating a full OpenSpec/SDD change (proposal, spec, design, tasks, apply-progress). It could not even recognize the term ODD without searching the package on disk.
Steps to reproduce
- Install gentle-pi together with
pi-claude-bridge, and set defaultProvider: "claude-bridge" in the Pi agent settings.json.
- Start a primary session and ask: "What is your default workflow? Quote any 'Organic Driven Development' instruction you received."
- The model has no ODD instruction and no el Gentleman identity contract. It reports a Claude Code system prompt plus the skills list. Ask it to "apply ODD" and it either guesses (for example, reads it as a typo for SDD) or falls back to the
gentle-ai skill's SDD routing.
- Compare with any non-bridge provider, where the same prompt returns the injected ODD protocol.
Expected and actual behavior
Expected: the harness (ODD default, identity, persona, RDD status, research block) reaches the model on every supported provider. If a provider cannot carry extension-injected prompt text, gentle-pi detects this and either uses a channel that provider forwards (for example appendSystemPrompt, a context file, or the skills block) or at least warns visibly that the harness is inactive.
Actual: under claude-bridge, the injected harness is silently dropped. Tools stay available, so nothing looks broken. The model follows the stale gentle-ai skill (#1085) and routes explicit ODD requests into SDD.
gentle-pi version
3.7.0 (pi-claude-bridge 0.8.0)
Pi version
0.87.1
Operating system
macOS
Relevant logs or error output (optional)
settings.json: defaultProvider = "claude-bridge", defaultModel = "claude-opus-5-5"
skills/gentle-ai/SKILL.md: 0 mentions of "ODD"/"Organic", 5 of "SDD"/"OpenSpec"
assets/orchestrator.md: contains the ODD protocol (injected via before_agent_start, never forwarded)
pi-claude-bridge src/index.ts: systemPrompt: { type: "preset", preset: "claude_code", append: <contextFiles + skills + custom + appendSystemPrompt> }
Before submitting
Problem
When Pi runs with the
claude-bridgeprovider (pi-claude-bridge), none of the gentle-pi harness text reaches the model. This covers the ODD protocol, the identity contract, the persona, the RDD status line, and the research capabilities block. The session looks normal, and gentle-pi tools such assubagent_run,gentle_review, andorchestrator_*all work. The model simply never receives "Default workflow: Organic Driven Development (MANDATORY)".Root cause:
systemPrompt: event.systemPrompt + gentlePrompt + …frombefore_agent_start(extensions/gentle-ai.ts, around line 9156;buildGentlePromptinlinesassets/orchestrator.md).pi-claude-bridge0.8.0 does not forward that assembled prompt. It recordsevent.systemPromptOptionsand sends Claude Code theclaude_codepreset, appending only the portable parts: context files, the skills block,customPrompt, andappendSystemPrompt(src/prompt-capture.ts,projectCapture;src/index.ts,systemPrompt: { type: "preset", preset: "claude_code", append }).before_agent_startreturn value is dropped without any warning. A bridge comment suggests this is deliberate: shipping Pi's harness verbatim trips Anthropic's third-party plan-eligibility check.Impact: the only gentle-pi guidance that survives is the skills block. In that block,
skills/gentle-ai/SKILL.mdstill sayslarge / ambiguous / risky → SDDand never mentions ODD (see #1085). Under claude-bridge, that stale skill becomes the sole workflow contract. In my session, the agent answered "apply ODD" by creating a full OpenSpec/SDD change (proposal, spec, design, tasks, apply-progress). It could not even recognize the term ODD without searching the package on disk.Steps to reproduce
pi-claude-bridge, and setdefaultProvider: "claude-bridge"in the Pi agentsettings.json.gentle-aiskill's SDD routing.Expected and actual behavior
Expected: the harness (ODD default, identity, persona, RDD status, research block) reaches the model on every supported provider. If a provider cannot carry extension-injected prompt text, gentle-pi detects this and either uses a channel that provider forwards (for example
appendSystemPrompt, a context file, or the skills block) or at least warns visibly that the harness is inactive.Actual: under
claude-bridge, the injected harness is silently dropped. Tools stay available, so nothing looks broken. The model follows the stalegentle-aiskill (#1085) and routes explicit ODD requests into SDD.gentle-pi version
3.7.0 (pi-claude-bridge 0.8.0)
Pi version
0.87.1
Operating system
macOS
Relevant logs or error output (optional)