From 11e0d51999797a48819aa44f2014f18d33ca9d6d Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 23 Aug 2026 19:46:39 -0700 Subject: [PATCH] perf(opencode): resolve instruction files once per turn Co-Authored-By: Claude Fable 5 --- packages/opencode/src/session/prompt.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index bd399bf9934d..fb0ee81def8f 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1099,6 +1099,11 @@ const layer = Layer.effect( let snapshotMs = 0 const session = yield* sessions.get(sessionID).pipe(Effect.orDie) + // Per turn, not per step: an instruction file edited by the turn itself applies next turn. + const instructionsStart = Date.now() + const instructions = yield* instruction.system().pipe(Effect.orDie) + contextMs += Date.now() - instructionsStart + while (true) { yield* status.set(sessionID, { type: "busy" }) yield* Effect.logInfo("loop", { "session.id": sessionID, step }) @@ -1291,10 +1296,9 @@ const layer = Layer.effect( yield* plugin.trigger("experimental.chat.messages.transform", {}, { messages: msgs }) const contextStart = Date.now() - const [skills, env, instructions, mcpInstructions, modelMsgs] = yield* Effect.all([ + const [skills, env, mcpInstructions, modelMsgs] = yield* Effect.all([ sys.skills(agent), sys.environment(model), - instruction.system().pipe(Effect.orDie), sys.mcp(agent, session.permission), MessageV2.toModelMessagesEffect(msgs, model), ])