slopus/happy · warning

Claude edit goal action is not supported

Error message

Claude edit goal action is not supported

What it means

Analogous to the clear guard: a 'set' (edit) goal action is only allowed when the active goal status advertises capabilities.edit. If the edit capability is absent, the handler rejects the action because the session cannot modify the goal.

Source

Thrown at packages/happy-cli/src/claude/runClaude.ts:592

            ? params as Record<string, unknown>
            : null;
        const command = actionParams ? parseClaudeGoalActionParams(actionParams) : null;
        if (!command) {
            throw new Error('Unsupported Claude goal action');
        }
        if (pendingClaudeGoalAction) {
            throw new Error('Claude goal action already in progress');
        }
        if (!latestClaudeGoalStatus || latestClaudeGoalStatus.status !== 'active') {
            throw new Error('No active Claude goal');
        }

        const capabilities = latestClaudeGoalStatus.capabilities ?? {};
        if (command.type === 'clear' && !capabilities.clear) {
            throw new Error('Claude clear goal action is not supported');
        }
        if (command.type === 'set' && !capabilities.edit) {
            throw new Error('Claude edit goal action is not supported');
        }
        if (currentRunMode !== 'remote') {
            throw new Error('Claude goal action is not ready: remote mode is not active');
        }
        if (!currentSession || currentSession.thinking) {
            throw new Error('Claude goal action is not ready while Claude is thinking');
        }
        if (messageQueue.size() > 0) {
            throw new Error('Claude message queue is busy');
        }

        const slashCommand = command.type === 'clear'
            ? '/goal clear'
            : `/goal ${command.objective}`;
        const mode = currentEnhancedMode();

        return await new Promise<{ ok: true }>((resolve, reject) => {
            const timeout = setTimeout(() => {

View on GitHub (pinned to b824cd0a46)

Solutions

  1. Upgrade CLI/Claude SDK to a version supporting goal edits.
  2. Clear and re-create the goal instead of editing it, if clear is supported.
  3. Gate the edit UI on capabilities.edit before sending the action.
  4. Verify the session's goal status metadata to confirm supported capabilities.

Example fix

// before
await rpc('goal-action', { action: 'set', goal: 'new goal' });
// after
if (goalStatus?.capabilities?.edit) await rpc('goal-action', { action: 'set', goal: 'new goal' });
Defensive patterns

Strategy: validation

Validate before calling

if (goalStatus?.status === 'active' && !goalStatus.capabilities?.edit) {
  console.warn('Editing goals is not supported by this session');
  return;
}

Type guard

function supportsEdit(s: { status: string; capabilities?: { edit?: boolean } } | null): boolean {
  return s?.status === 'active' && s.capabilities?.edit === true;
}

Try / catch

try {
  await rpc('goal-action', { action: 'set', goal });
} catch (err) {
  if ((err as Error).message.includes('edit goal action is not supported')) {
    logger.warn('Session cannot edit goals — clear and re-create the goal or upgrade the SDK');
  } else throw err;
}

Prevention

When it happens

Trigger: A 'goal-action' with type 'set' arrives while capabilities.edit is falsy on the latest goal status — the running Claude integration does not support editing an existing goal.

Common situations: Older Claude SDK versions without goal editing; session started in a mode that disables goal edits; app UI not gated on advertised capabilities.

Related errors


AI-assisted analysis of slopus/happy@b824cd0a46 (2026-08-31). Data as JSON: /api/errors/5e5014523458dd3b. Report an issue: GitHub.