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
- Run /codex:status <job-id> to wait for or inspect the running task.
- Cancel the active task with /codex:cancel <job-id> if it is stuck.
- 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
- Check /codex:status before launching or resuming tasks.
- Cancel stale tasks before starting new ones.
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
- No previous Codex task thread was found for this repository.
- Unsupported reasoning effort "${effort}". Use one of: none,
- Provide a prompt, a prompt file, piped stdin, or use --resum
- Choose either --resume/--resume-last or --fresh.
- No stored job found for ${options["job-id"]}.
AI-assisted analysis of openai/codex-plugin-cc@db52e28f4d (2026-08-13).
Data as JSON: /api/errors/7a1c767d95ccf8db.
Report an issue: GitHub.