openai/codex-plugin-cc · error · Error

Task ${activeTask.id} is still running. Use /codex:status be

Error message

Task ${activeTask.id} is still running. Use /codex:status before continuing it.

What it means

resolveLatestTrackedTaskThread scans jobs for the workspace, filters to the current Claude session, and finds any task job still in 'queued' or 'running' status. If one exists, resuming is blocked because only one active task per session is allowed (the broker enforces single-flight). The error names the running job id and points to /codex:status.

Source

Thrown at plugins/codex/scripts/codex-companion.mjs:343

    await sleep(Math.min(pollIntervalMs, Math.max(0, deadline - Date.now())));
    snapshot = buildSingleJobSnapshot(cwd, reference);
  }

  return {
    ...snapshot,
    waitTimedOut: isActiveJobStatus(snapshot.job.status),
    timeoutMs
  };
}

async function resolveLatestTrackedTaskThread(cwd, options = {}) {
  const workspaceRoot = resolveWorkspaceRoot(cwd);
  const sessionId = getCurrentClaudeSessionId();
  const jobs = sortJobsNewestFirst(listJobs(workspaceRoot)).filter((job) => job.id !== options.excludeJobId);
  const visibleJobs = filterJobsForCurrentClaudeSession(jobs);
  const activeTask = visibleJobs.find((job) => job.jobClass === "task" && (job.status === "queued" || job.status === "running"));
  if (activeTask) {
    throw new Error(`Task ${activeTask.id} is still running. Use /codex:status before continuing it.`);
  }

  const trackedTask = findLatestResumableTaskJob(visibleJobs);
  if (trackedTask) {
    return { id: trackedTask.threadId };
  }

  if (sessionId) {
    return null;
  }

  return findLatestTaskThread(workspaceRoot);
}

async function executeReviewRun(request) {
  ensureCodexAvailable(request.cwd);
  ensureGitRepository(request.cwd);

View on GitHub (pinned to db52e28f4d)

Solutions

  1. Run /codex:status <job-id> to wait for or inspect the running task.
  2. Cancel the active task with /codex:cancel <job-id> if it is stuck.
  3. Wait for the queued/running task to complete before resuming.

Example fix

// before (task abc123 still running)
codex-companion.mjs task --resume-last
// after
codex-companion.mjs status abc123   # wait for completion, then resume
Defensive patterns

Strategy: validation

Validate before calling

const active = jobs.find(j => j.jobClass === 'task' && (j.status === 'queued' || j.status === 'running'));
if (active) throw new Error(`Task ${active.id} active`);

Type guard

/** @param {object} j @returns {boolean} */
function isTaskActive(j) {
  return j.jobClass === 'task' && (j.status === 'queued' || j.status === 'running');
}

Prevention

When it happens

Trigger: Calling `task --resume-last` (or any path through resolveLatestTrackedTaskThread) while a previously launched background task has not finished.

Common situations: A background task is still running and the user tries to start/resume another; the session filter ties jobs to the current Claude session id (SESSION_ID_ENV).

Related errors


AI-assisted analysis of openai/codex-plugin-cc@db52e28f4d (2026-08-13). Data as JSON: /api/errors/7a1c767d95ccf8db. Report an issue: GitHub.