similar/related issues : https://github.com/pingdotgg/t3code/issues/24466 https://github.com/pingdotgg/t3code/issues/24465
[Bug]: Redundant prompts/instructions#24185
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
have a typical chat with the agent and same instructions gets appended in each turn with copilot acp
Expected behavior
no redunandancy
Actual behavior
redunandcy :
Impact
Blocks work completely
Version or commit
latest nightly on windows
Environment
provider copilot on windows
Logs or stack traces
| 1 |
Screenshots, recordings, or supporting files
No response
Workaround
No response
Confirming the same behavior on an ACP Registry provider other than Copilot (agy-acp, provider: acpRegistry, T3 desktop on macOS).
Every ordinary user message — including short follow-ups in one uninterrupted session with no config change — gets the same two blocks appended: <runtime_info> and the full <pull_request_linking> policy. Measured in T3's own message store: each message is stored twice, a raw copy (creationSource: "web", just the user text) and a provider-side copy (creationSource: "provider", user text + ~1.5KB of appended context). The thread view renders the provider-side copy, so the appended blocks are visible as pasted text on every message.
No settings toggle exists to disable the append (checked settings.json, client-settings.json, desktop-settings.json). The blocks are harmless context for the model, but the per-turn re-injection duplicates ~1.5KB of text into the durable conversation and clutters the visible history on every turn.
#24466 (closed as a duplicate of this issue) has the precise code diagnosis (resolvePromptParts unconditionally appends buildRuntimeInstructions(...) with no change-tracking, unlike the larger instruction block).
Root cause and a working fix, confirmed with Copilot ACP.
Cause: in packages/provider-acp/src/server/adapter.ts (resolvePromptParts), the orchestration instructions (t3AcpPromptWithInstructions) are only resent when the mode or tools change. But the separate buildRuntimeInstructions block (<runtime_info> + <pull_request_linking>) is pushed onto every non-slash prompt without any check. Since ACP sessions keep their own history, that block piles up in the native conversation on every turn.
Fix: remember, per ACP session, the runtime block last sent, and send it again only when its text changes (e.g. a model switch), after compaction, or for a new session. It's recorded only after a successful session/prompt, next to the existing instruction state, and cleared on runtime replacement. It applies to all ACP agents.
Branch (one commit on top of v0.1.3, with an extended AcpAdapterV2.test.ts case that fails before the fix): https://github.com/mmazur/t3code/tree/fix/acp-repeated-instructions
Commit: https://github.com/mmazur/t3code/commit/ec5d536ba813949e5c41c9efe91a3695fae0ba92
I'm using this branch as my daily T3 build with Copilot, and it seems to work thus far: follow-up messages no longer include the runtime/PR instructions.