Skip to content

Skill workflows stall or run away in the app across Cursor and Anthropic models #3

Description

@devswha

Summary

CUA testing of every bundled skill exposed workflow execution failures in the web app. Skill selection and the Run confirmation gate work, but the executable workflows do not reliably reach their terminal user-facing state.

Environment

  • Gajae Code App v2.0.0-beta.3
  • Disposable git project with only README.md
  • Models tested: cursor/cursor-grok-4.6-xhigh-fast, anthropic/claude-fable-5
  • App dev server on macOS arm64

Results

Skill Model Result
deep-interview cursor-grok Failed to ask the requested first question after more than 60 seconds; repeatedly probed gjc deep-interview read, which gjc, shell redirects, and CLI help while reporting missing/incomplete command output. Had to stop manually.
ralplan --deliberate cursor-grok Received the full objective, but never produced a receipt or approval gate. Repeatedly probed pwd, ls, which gjc, environment variables, and find, while reporting that normal shell output was empty. Had to stop manually.
ultragoal claude-fable-5 Created and byte-verified the requested one-line file, but first invoked the goal tool as {} and hit validation failure (op missing). It then continued through an oversized quality-gate flow, displayed a quality-gate write error, consumed about 49,290 tokens, and was still running after the requested file was verified. Had to stop manually.
team n/a Expected behavior passes: it is hidden from the picker and typed /skill:team is refused with the tmux/ultragoal guidance.

Reproduction

  1. Add a minimal local git project.
  2. Start a new task.
  3. Pick one of the visible bundled skills from the sparkle menu.
  4. Add a bounded objective after the inserted /skill:<name> command.
  5. Click Send, then Run.
  6. Observe that deep-interview/ralplan repeatedly diagnose missing CLI or shell output, or that ultragoal continues far past verified completion.

Ultragoal goal-tool error:

Validation failed for tool "goal":
op: Invalid option: expected one of "create"|"get"|"complete"|"resume"|"drop"|"pause"
Received arguments: {}

Expected

  • deep-interview reaches one user-facing question without repeatedly probing its own CLI.
  • ralplan produces its persisted receipt and approval boundary.
  • ultragoal calls goal with valid arguments, completes once the bounded goal and quality checks pass, and does not consume tens of thousands of tokens for a one-line file.
  • Provider tool results and workflow state are delivered consistently enough that the model does not self-diagnose missing shell output.

Activity

  1. devswha commented on Aug 16, 2026

    @devswha
    OwnerAuthor

    App-side command transport and CI blockers have now been remediated in #7–#9. The remaining deep-interview, ralplan, and ultragoal failures are owned by the pinned coding-agent workflow/tool lifecycle. No app-side fallback executor was added. Remaining work requires direct SDK reproduction and an upstream fixed release, followed by the acceptance scenarios already listed in this issue.

  2. devswha commented on Sep 3, 2026

    @devswha
    OwnerAuthor

    Current status: this report predates the interactive-prompt and permission rework (beta.5-beta.8). The two runaway patterns it names — the runtime probing shell state instead of asking, and gates never reaching a terminal state — now have dedicated paths: tool asks render as cards with allow/deny, OAuth and Chromium prompts use the same select UI, and Stop works from the moment a run is accepted. That does not prove every bundled skill completes; it changes the failure modes enough that the beta.3 table is stale. Next step on our side is re-running this skill matrix against beta.8 and converting each surviving failure into its own issue. Keeping this open as the tracking issue until that matrix exists.

  3. devswha commented on Sep 4, 2026

    @devswha
    OwnerAuthor

    Root-cause analysis against current main + the pinned runtime (0.15.6). Three distinct causes, two of them shared with #18:

    A. Corrupt workflow session identity (= #18)

    The SDK tool session's getSessionId() returns the AsyncJobManager endpoint key — a JSON tuple for app sessions — and the runtime's bash tool injects it as GJC_SESSION_ID into every spawned command (buildGjcRuntimeSessionEnv). So even a working gjc state subprocess was pointed at the corrupt .gjc/_session-["async-job-endpoint",...] tree: state written in one turn was invisible the next, which is exactly the deep-interview/ralplan "stall" pattern (the model re-probes, self-diagnoses missing output, never reaches a terminal state). Fixed upstream in Yeachan-Heo/gajae-code#5282; lands here with the next pin bump.

    B. No gjc on PATH inside app sessions

    The bundled skills (deep-interview, ralplan, ultragoal, autoresearch) drive their state machine through gjc state <skill> ... shell commands. In the app those run in the session's bash environment, which is the app server's environment — a machine without a global gjc install (the CUA sandbox, any end user) gets command not found, and the model flails through which gjc, redirects, and CLI help exactly as the report shows. On the maintainer's machine a global ~/.local/bin/gjc masks this — and worse, it's a different runtime than the app's pinned one.

    Fix in progress: the worker already resolves a pinned bun (runtime.bunPath ?? dist-native/bun) and session bash inherits the worker's process.env, so the app will ship a shim directory on the worker's PATH with a gjc wrapper that invokes the pinned runtime's bin/gjc.js under the pinned bun — session-scoped state commands then work identically in dev, self-hosted, and packaged installs.

    C. ultragoal goal {} + quality-gate runaway

    The goal tool was invoked with empty arguments (a model-side error the validation layer correctly rejected) and the run continued ~49k tokens past verified completion. A+B remove the state-loss excuses that feed this loop (quality gates re-verifying unreadable state), but the completion-boundary behavior itself needs a CUA re-run once A+B land before we call it fixed.

    team staying hidden/refused is the expected behavior and matches the report.

    Keeping this open until the shim (B) and the pin bump (A) land and the skill matrix is re-run in the sandbox.

  4. devswha commented on Sep 10, 2026

    @devswha
    OwnerAuthor

    Closing per owner decision (2026-09-10).

    The three root causes identified in the 2026-09-04 analysis were addressed by the follow-up implementation that has since landed: goal state now comes from the SDK transcript with authenticated, scoped pause/resume/cancel controls and app-owned delegation (permissions/account/model/effort inheritance, workflow guards, cancellation), and the workflow step lease was raised from 20 to 200. See GJC-DELEGATION-CONTRACT.md and the session handoff for the exact contract.

    What was never done is the final live qualification across Cursor/Anthropic models — the owner excluded cross-model live skill testing, so this is closed as addressed-by-design rather than proven live. If a user report shows deep-interview/ralplan/ultragoal still stalling or running away on current builds, open a fresh issue with the model and session evidence and it will be handled there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions