Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ All notable changes to codexclaw are documented here. The format follows

## [Unreleased]

### Fixed

- The goal-mode interview guard now names the route when it denies `request_user_input` during an active goal: ask with `request_user_input_async` when the host exposes it, otherwise in plain text. Its old reason ended with "silence is not approval" and named no alternative, so an agent with an approval question retried the blocked tool or stopped, and the user saw only "Blocked by hook".

## [0.2.46] - 2026-10-31

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion plugins/codexclaw/components/pabcd-state/dist/goal-gate.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ function cxcInvocation(moduleUrl ) {

const REQUEST_USER_INPUT_TOOL = "request_user_input";
const GOAL_MODE_DENY_REASON =
"Blocking Interview / request_user_input denied. Owner: $codexclaw:cxc-dev async-questions.md; silence is not approval.";
"Blocking Interview / request_user_input denied while a goal is active; ask with request_user_input_async if exposed, else in text. Owner: $codexclaw:cxc-dev async-questions.md";

const UPDATE_GOAL_TOOL_NAME = "update_goal";

Expand Down
2 changes: 1 addition & 1 deletion plugins/codexclaw/components/pabcd-state/src/goal-gate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ function cxcInvocation(moduleUrl: string): string {

const REQUEST_USER_INPUT_TOOL = "request_user_input";
const GOAL_MODE_DENY_REASON =
"Blocking Interview / request_user_input denied. Owner: $codexclaw:cxc-dev async-questions.md; silence is not approval.";
"Blocking Interview / request_user_input denied while a goal is active; ask with request_user_input_async if exposed, else in text. Owner: $codexclaw:cxc-dev async-questions.md";

const UPDATE_GOAL_TOOL_NAME = "update_goal";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ test("applyGoalModeInterviewGuard: active goal -> deny request_user_input", () =
assert.match(hso.additionalContext, /goal-active=active/);
assert.match(hso.permissionDecisionReason, /Interview.*request_user_input/);
assert.match(hso.permissionDecisionReason, /\$codexclaw:cxc-dev async-questions\.md/);
assert.match(hso.permissionDecisionReason, /silence is not approval/);
assert.match(hso.permissionDecisionReason, /ask with request_user_input_async/);
assert.ok(Buffer.byteLength(hso.additionalContext) <= 200);
});

Expand Down
Loading