ComposioHQ/composio · warning · KeyringError
NoEntry
NoEntry
Error message
NoEntry
What it means
getSecret on the secret-tool store ran `secret-tool lookup` successfully but stdout was empty, meaning no matching credential exists. KeyringError kind 'NoEntry' is the canonical not-found signal.
Source
Thrown at ts/packages/cli-keyring/src/stores/linux-secret-tool.ts:190
),
});
}
const args = ['lookup', ...attributeArgs(service, user, modifiers)];
let result: SpawnResult;
try {
result = await runCommand({ command: SECRET_TOOL_BIN, args });
} catch (err) {
throw this.spawnErrorToKeyringError(err);
}
if (result.code === 0) {
const stdout = bytesToUtf8(result.stdout);
// `secret-tool lookup` prints the password without a trailing
// newline when found, and prints nothing (exit 0) when not found.
if (stdout.length === 0) {
throw new KeyringError({ kind: 'NoEntry' });
}
try {
return decodeSecret(stdout);
} catch (err) {
throw new KeyringError({
kind: 'BadDataFormat',
bytes: new Uint8Array(result.stdout),
cause: err,
});
}
}
// Exit 1 can mean many things — stderr is the real signal.
throw classifyFailure(result, 'secret-tool lookup');
}
async deleteCredential(service: string, user: string, modifiers: EntryModifiers): Promise<void> {
validateSpecifier(service, user);View on GitHub (pinned to 64b1b85502)
Solutions
- Handle NoEntry as 'credential missing' and trigger your login/authorization flow
- Verify the exact service/user/attribute strings match what was stored
- Re-create the credential
Example fix
// before
const secret = await store.getSecret(service, user, mods);
// after
try { const secret = await store.getSecret(service, user, mods); }
catch (e) { if (e instanceof KeyringError && e.kind === 'NoEntry') await promptLogin(); else throw e; } Defensive patterns
Strategy: try-catch
Try / catch
catch (e) { if (e instanceof KeyringError && e.kind === 'NoEntry') { await startLoginFlow(); return; } throw e; } Prevention
- Treat NoEntry as an expected not-found, not a crash
- Store credentials immediately after first authorization
When it happens
Trigger: Looking up a (service, user) pair that was never stored, was deleted, or whose attributes don't match exactly.
Common situations: First-run before login/authorization, changed attribute schema between versions, or a cleared keyring.
Related errors
AI-assisted analysis of ComposioHQ/composio@64b1b85502 (2026-08-28).
Data as JSON: /api/errors/1d58e3caaa854049.
Report an issue: GitHub.