ComposioHQ/composio · error · KeyringError

NoStorageAccess

NoStorageAccess

Error message

D-Bus session bus not available — no DBUS_SESSION_BUS_ADDRESS and no /run/user/<uid>/bus

What it means

The Linux secret-tool store cannot persist a secret because no D-Bus session bus is reachable: DBUS_SESSION_BUS_ADDRESS is unset and /run/user/<uid>/bus does not exist. KeyringError kind 'NoStorageAccess'.

Source

Thrown at ts/packages/cli-keyring/src/stores/linux-secret-tool.ts:135

}

export class LinuxSecretToolStore implements CredentialStore {
  readonly id = 'linux-secret-tool';
  readonly vendor = 'freedesktop.org Secret Service (via secret-tool)';

  persistence(): CredentialPersistence {
    return CredentialPersistence.UntilDelete;
  }

  async setSecret(
    service: string,
    user: string,
    secret: Uint8Array,
    modifiers: EntryModifiers
  ): Promise<void> {
    validateSpecifier(service, user);
    if (missingDBus()) {
      throw new KeyringError({
        kind: 'NoStorageAccess',
        cause: new Error(
          'D-Bus session bus not available — no DBUS_SESSION_BUS_ADDRESS and no /run/user/<uid>/bus'
        ),
      });
    }

    const encoded = encodeSecret(secret);
    const label = modifiers.label ?? defaultLabel(service, user);
    const args = ['store', '--label', label, ...attributeArgs(service, user, modifiers)];

    // `secret-tool store` reads the password from stdin (one line,
    // terminated by LF). encodeSecret returns ASCII base64 with our
    // `b64:` prefix, so it's always a single printable line.
    let result: SpawnResult;
    try {
      result = await runCommand({
        command: SECRET_TOOL_BIN,

View on GitHub (pinned to 64b1b85502)

Solutions

  1. Install/enable dbus-user-session (provides /run/user/<uid>/bus) and ensure a user session exists
  2. Export DBUS_SESSION_BUS_ADDRESS pointing at a running session bus (e.g. from dbus-launch)
  3. In headless contexts, use a file-based or env-based credential store instead
Defensive patterns

Strategy: fallback

Validate before calling

const busOk = !!process.env.DBUS_SESSION_BUS_ADDRESS || existsSync(`/run/user/${process.uid}/bus`);

Try / catch

catch (e) { if (e instanceof KeyringError && e.kind === 'NoStorageAccess') { await fileStore.setSecret(...); } else throw e; }

Prevention

When it happens

Trigger: Calling setSecret in an SSH session, container, or systemd-less environment with no session bus.

Common situations: Docker/CI containers, headless servers, cron jobs, WSL without dbus-user-session installed.

Related errors


AI-assisted analysis of ComposioHQ/composio@64b1b85502 (2026-08-28). Data as JSON: /api/errors/ba7e0051f51023e3. Report an issue: GitHub.