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_idView on GitHub (pinned to affd8760f4)
Solutions
- Read the daemon's embedded reason and fix the underlying daemon-side issue it names.
- Restart the daemon and re-run `astrid capsule list`.
- Align CLI and daemon versions (upgrade the daemon if you just updated the CLI).
- 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
- Ensure the daemon is fully started before scripting `astrid capsule list`.
- Align CLI and daemon versions; skew is the top cause of rejected metadata requests.
- Watch daemon logs for registry/permission errors in its metadata store.
- Add a daemon health check (ping) before issuing metadata queries in automation.
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
- daemon rejected capsule metadata request: {message}
- an Astrid daemon appears to be running but its uplink is unr
- an Astrid daemon appears to be running but its uplink is unr
- daemon metadata lookup failed: {error}
- unexpected daemon metadata response: {other:?}
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/8c60fe0cd1de12ac.
Report an issue: GitHub.