diff --git a/.changeset/user-prompt-hook-context.md b/.changeset/user-prompt-hook-context.md
new file mode 100644
index 0000000000..5dcd0cdaa0
--- /dev/null
+++ b/.changeset/user-prompt-hook-context.md
@@ -0,0 +1,6 @@
+---
+"@moonshot-ai/agent-core": patch
+"@moonshot-ai/kimi-code": patch
+---
+
+Keep blocked prompt hook conversations available to subsequent model turns.
diff --git a/apps/vis/web/src/components/wire/WireHeadline.tsx b/apps/vis/web/src/components/wire/WireHeadline.tsx
index 62384f2cb1..a743b3a788 100644
--- a/apps/vis/web/src/components/wire/WireHeadline.tsx
+++ b/apps/vis/web/src/components/wire/WireHeadline.tsx
@@ -156,18 +156,6 @@ export function renderHeadline(r: AgentRecord): HeadlineRender {
),
};
- case 'context.mark_last_user_prompt_blocked':
- return {
- main: (
-
-
- blocked
-
- hook: {r.hookEvent}
-
- ),
- };
-
case 'context.clear':
return { main: context cleared };
diff --git a/apps/vis/web/src/components/wire/typeMeta.ts b/apps/vis/web/src/components/wire/typeMeta.ts
index 2f02bf0a74..66d5a0eea6 100644
--- a/apps/vis/web/src/components/wire/typeMeta.ts
+++ b/apps/vis/web/src/components/wire/typeMeta.ts
@@ -12,7 +12,6 @@ export const TYPE_TONE: Record = {
'turn.cancel': 'warning',
'context.append_message': 'assistant',
'context.append_loop_event': 'meta',
- 'context.mark_last_user_prompt_blocked': 'warning',
'context.clear': 'warning',
'context.apply_compaction': 'compaction',
'tools.register_user_tool': 'tools',
@@ -40,7 +39,6 @@ export const TYPE_LABEL: Record = {
'turn.cancel': 'cancel',
'context.append_message': 'message',
'context.append_loop_event': 'loop',
- 'context.mark_last_user_prompt_blocked': 'blocked',
'context.clear': 'clear',
'context.apply_compaction': 'compacted',
'tools.register_user_tool': 'tool+',
diff --git a/packages/agent-core/src/agent/context/index.ts b/packages/agent-core/src/agent/context/index.ts
index a9d65cb2a2..2244a98f37 100644
--- a/packages/agent-core/src/agent/context/index.ts
+++ b/packages/agent-core/src/agent/context/index.ts
@@ -52,22 +52,6 @@ export class ContextMemory {
});
}
- markLastUserPromptBlocked(hookEvent: string): void {
- this.agent.records.logRecord({
- type: 'context.mark_last_user_prompt_blocked',
- hookEvent,
- });
- for (let i = this._history.length - 1; i >= 0; i--) {
- const message = this._history[i];
- if (message?.role !== 'user' || message.origin?.kind !== 'user') continue;
- this._history[i] = {
- ...message,
- origin: { ...message.origin, blockedByHook: hookEvent },
- };
- return;
- }
- }
-
clear(): void {
this.agent.records.logRecord({ type: 'context.clear' });
this._history = [];
diff --git a/packages/agent-core/src/agent/context/types.ts b/packages/agent-core/src/agent/context/types.ts
index a366fce350..ad57895c67 100644
--- a/packages/agent-core/src/agent/context/types.ts
+++ b/packages/agent-core/src/agent/context/types.ts
@@ -5,7 +5,6 @@ import type { BackgroundTaskStatus } from '../../tools/background';
export interface UserPromptOrigin {
readonly kind: 'user';
- readonly blockedByHook?: string | undefined;
}
export const USER_PROMPT_ORIGIN: UserPromptOrigin = { kind: 'user' };
diff --git a/packages/agent-core/src/agent/records/index.ts b/packages/agent-core/src/agent/records/index.ts
index b8fddb9f52..4261c997c9 100644
--- a/packages/agent-core/src/agent/records/index.ts
+++ b/packages/agent-core/src/agent/records/index.ts
@@ -70,9 +70,6 @@ function restoreAgentRecord(agent: Agent, input: AgentRecord): void {
case 'context.append_message':
agent.context.appendMessage(input.message);
return;
- case 'context.mark_last_user_prompt_blocked':
- agent.context.markLastUserPromptBlocked(input.hookEvent);
- return;
case 'context.append_loop_event':
agent.context.appendLoopEvent(input.event);
return;
diff --git a/packages/agent-core/src/agent/records/types.ts b/packages/agent-core/src/agent/records/types.ts
index 88fbe6ef37..ca869e30df 100644
--- a/packages/agent-core/src/agent/records/types.ts
+++ b/packages/agent-core/src/agent/records/types.ts
@@ -66,7 +66,6 @@ export interface AgentRecordEvents {
'full_compaction.complete': {};
'context.append_message': { message: ContextMessage };
- 'context.mark_last_user_prompt_blocked': { hookEvent: string };
'context.append_loop_event': { event: LoopRecordedEvent };
'context.clear': {};
'context.apply_compaction': CompactionResult;
diff --git a/packages/agent-core/src/agent/turn/index.ts b/packages/agent-core/src/agent/turn/index.ts
index c14a4727f3..102b7f5deb 100644
--- a/packages/agent-core/src/agent/turn/index.ts
+++ b/packages/agent-core/src/agent/turn/index.ts
@@ -316,7 +316,6 @@ export class TurnFlow {
signal.throwIfAborted();
const blockResult = renderUserPromptHookBlockResult(promptHookResults);
if (blockResult !== undefined) {
- this.agent.context.markLastUserPromptBlocked('UserPromptSubmit');
this.agent.context.appendMessage({
role: 'assistant',
content: [{ type: 'text', text: blockResult.text }],
diff --git a/packages/agent-core/test/agent/context.test.ts b/packages/agent-core/test/agent/context.test.ts
index 740e3eeda6..2d6f5ff415 100644
--- a/packages/agent-core/test/agent/context.test.ts
+++ b/packages/agent-core/test/agent/context.test.ts
@@ -155,7 +155,6 @@ describe('Agent context', () => {
ctx.configure();
ctx.agent.context.appendUserMessage([{ type: 'text', text: 'blocked prompt' }]);
- ctx.agent.context.markLastUserPromptBlocked('UserPromptSubmit');
ctx.agent.context.appendMessage({
role: 'assistant',
content: [
diff --git a/packages/agent-core/test/agent/turn.test.ts b/packages/agent-core/test/agent/turn.test.ts
index 24ffa366eb..b39731e0b1 100644
--- a/packages/agent-core/test/agent/turn.test.ts
+++ b/packages/agent-core/test/agent/turn.test.ts
@@ -425,7 +425,7 @@ describe('Agent turn flow', () => {
role: 'user',
content: [{ type: 'text', text: 'bad words here' }],
toolCalls: [],
- origin: { kind: 'user', blockedByHook: 'UserPromptSubmit' },
+ origin: { kind: 'user' },
},
{
role: 'assistant',