astrid-runtime/astrid · error

daemon rejected capsule metadata request: {message}

Error message

daemon rejected capsule metadata request: {message}

What it means

Raised by `list_capsules` when the daemon responds to `KernelRequest::GetCapsuleMetadata` with `KernelResponse::Error(message)`. Just like the update path, the CLI surfaces the daemon's own rejection reason verbatim. `astrid capsule list` cannot show anything without the metadata entries, so the error aborts the listing.

Source

Thrown at crates/astrid-cli/src/commands/capsule/list.rs:25

use astrid_core::dirs::AstridHome;
use astrid_core::kernel_api::{KernelRequest, KernelResponse};
use colored::Colorize;

#[cfg(test)]
use super::meta::scan_installed_capsules_in_home_for_with_layout;
use crate::theme::Theme;

/// List all installed capsules with their provides/requires metadata.
///
/// In default mode, shows a compact one-line-per-capsule view with capability
/// counts. With `--verbose`, expands each capsule to show the full capability
/// list and install source.
pub(crate) async fn list_capsules(verbose: bool) -> anyhow::Result<()> {
    let mut client = crate::socket_client::connect_kernel_for_workspace(None).await?;
    let entries = match client.request(KernelRequest::GetCapsuleMetadata).await? {
        KernelResponse::CapsuleMetadata(entries) => entries,
        KernelResponse::Error(message) => {
            anyhow::bail!("daemon rejected capsule metadata request: {message}")
        },
        other => anyhow::bail!("unexpected daemon response: {other:?}"),
    };

    if entries.is_empty() {
        println!("{}", Theme::info("No capsules installed."));
        return Ok(());
    }

    println!(
        "{} ({})",
        Theme::header("Installed Capsules"),
        entries.len()
    );
    println!("{}", Theme::separator());
    for entry in &entries {
        let source = entry
            .source_id

View on GitHub (pinned to affd8760f4)

Solutions

  1. Read the daemon's embedded reason and fix the underlying daemon-side issue it names.
  2. Restart the daemon and re-run `astrid capsule list`.
  3. Align CLI and daemon versions (upgrade the daemon if you just updated the CLI).
  4. Verify daemon logs for the metadata request failure and repair or reinstall affected capsules.

Example fix

// before
astrid capsule list
// error: daemon rejected capsule metadata request: registry unavailable

// after
astrid daemon restart
astrid capsule list
Defensive patterns

Strategy: try-catch

Try / catch

match list_capsules(verbose).await {
    Ok(()) => {},
    Err(e) if e.to_string().contains("daemon rejected capsule metadata request") => {
        eprintln!("{e:#}\nTry: astrid daemon restart, then re-run capsule list.");
        std::process::exit(1);
    },
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Running `astrid capsule list` when `connect_kernel_for_workspace` succeeds but the daemon returns an Error response to GetCapsuleMetadata — daemon-side registry failure, permission problem, or incompatible daemon build.

Common situations: Daemon just started and not ready; daemon's metadata cache unreadable; CLI/daemon version mismatch; daemon under a different user without access to the requesting principal's data.

Related errors


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/8c60fe0cd1de12ac. Report an issue: GitHub.