can1357/oh-my-pi · error

Unknown Codex Security cloud configuration: ${configurationI

Error message

Unknown Codex Security cloud configuration: ${configurationId}

What it means

getConfiguration() pages through all cloud scan configurations (500 per page) and throws this error if no item's id or sourceId equals the requested configurationId. The identifier exists locally but not in the cloud's current configuration list.

Source

Thrown at packages/coding-agent/src/security/cloud.ts:262

		const configurations: CodexSecurityCloudConfiguration[] = [];
		let cursor: string | undefined;
		do {
			const page = await this.listConfigurations({ limit: 500, cursor, signal });
			configurations.push(...page.items);
			cursor = page.nextCursor;
		} while (cursor);
		return configurations;
	}

	async getConfiguration(configurationId: string, signal?: AbortSignal): Promise<CodexSecurityCloudConfiguration> {
		let cursor: string | undefined;
		do {
			const page = await this.listConfigurations({ limit: 500, cursor, signal });
			const found = page.items.find(item => item.id === configurationId || item.sourceId === configurationId);
			if (found) return found;
			cursor = page.nextCursor;
		} while (cursor);
		throw new Error(`Unknown Codex Security cloud configuration: ${configurationId}`);
	}

	async startScan(input: StartCodexSecurityCloudScanInput): Promise<CodexSecurityCloudConfiguration> {
		if (
			input.lookbackDays !== undefined &&
			input.lookbackDays !== "all" &&
			(!Number.isInteger(input.lookbackDays) || input.lookbackDays < 1)
		) {
			throw new Error("lookbackDays must be a positive integer or 'all'");
		}
		const raw = await this.#request("scan_configurations", {
			method: "POST",
			signal: input.signal,
			body: accessToken => {
				const scanInput: JsonObject = {
					environment_id: input.environmentId,
					lookback_days: input.lookbackDays === "all" ? null : (input.lookbackDays ?? 30),
					notification_rules: [],

View on GitHub (pinned to 9690622007)

Solutions

  1. Call listConfigurations() and pick a currently-existing id/sourceId
  2. Re-create the scan configuration in the cloud and use its new id
  3. Verify you are authenticated against the same cloud account/tenant that owns the configuration
  4. Check the id for typos/truncation

Example fix

// before
const config = await client.getConfiguration("cfg_old_deleted");
// after
const page = await client.listConfigurations({ limit: 500 });
const config = await client.getConfiguration(page.items[0].id); // a live id
Defensive patterns

Strategy: try-catch

Validate before calling

const page = await client.listConfigurations({ limit: 500 });
if (!page.items.some(i => i.id === id || i.sourceId === id)) {
  throw new Error(`Configuration ${id} not found in cloud`);
}

Try / catch

try {
  const config = await client.getConfiguration(configurationId);
} catch (err) {
  if (err.message.startsWith("Unknown Codex Security cloud configuration")) {
    const page = await client.listConfigurations({ limit: 500 });
    // fall back to first available config or prompt re-selection
  } else throw err;
}

Prevention

When it happens

Trigger: Calling getConfiguration(configurationId) with an id from an old/deleted configuration, a sourceId that no longer matches, a typo'd/truncated id, or after the configuration was deleted in the cloud UI.

Common situations: Cached configuration ids from previous sessions; configurations deleted or re-created (new id) server-side; scanning with a sourceId from a different cloud tenant/account.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/c9ae9948ff2cacc5. Report an issue: GitHub.