xai-org/grok-build · error
{}
Error message
{} What it means
connect_to_leader resolves the leader target and converts resolve_leader_target's structured error (e.message) into an anyhow error verbatim. This surfaces any failure in leader discovery/selection — no leader registered for the environment, ambiguous or invalid target, or stale registration data — before a socket connection is even attempted.
Source
Thrown at crates/codegen/xai-grok-pager-bin/src/main.rs:390
} else {
eprintln!("No live leader processes found.");
}
Ok(())
}
fn resolve_target(args: &LeaderTargetArgs) -> LeaderTarget {
match args.pid {
Some(pid) => LeaderTarget::Pid(pid),
None => LeaderTarget::Environment(xai_grok_shell::env::GrokBuildEnvironment::Production),
}
}
#[tracing::instrument(skip_all)]
async fn connect_to_leader(
args: &LeaderTargetArgs,
) -> Result<(LeaderDescriptor, xai_grok_shell::leader::LeaderClient)> {
let target = resolve_target(args);
let selection = xai_grok_shell::leader::resolve_leader_target(target)
.await
.map_err(|e| anyhow::anyhow!("{}", e.message))?;
let socket_path = selection
.socket_path()
.ok_or_else(|| anyhow::anyhow!("resolved leader target did not include a socket path"))?;
let client = xai_grok_shell::leader::LeaderClient::connect(
socket_path.to_path_buf(),
"grok-pager-leader-cli",
ClientMode::Stdio,
ClientCapabilities::default(),
)
.await?;
Ok((selection.descriptor, client))
}
/// Prefer socket-verified live PID over a possibly-recycled lock file PID.
fn leader_pid(d: &LeaderDescriptor) -> Option<u32> {
d.live_info.as_ref().map(|li| li.pid).or(d.pid_from_lock)
}
fn print_leader_descriptor(d: &LeaderDescriptor) {
let pid = leader_pid(d)View on GitHub (pinned to bc7f02eddd)
Solutions
- Read the embedded e.message for the specific resolution failure and address it
- Start a grok session (or `grok workspace start`) so a leader registers for the environment
- Verify the --leader/target argument matches an existing environment/leader name
- Clear stale leader registration state and let a fresh session re-register
Defensive patterns
Strategy: validation
Validate before calling
// ensure a leader is registered before connecting
let target = resolve_target(args);
match xai_grok_shell::leader::resolve_leader_target(target).await {
Ok(sel) if sel.socket_path().is_some() => Ok(sel),
Ok(_) => Err(anyhow!("leader resolved but no socket path")),
Err(e) => Err(anyhow!("leader resolution failed: {}", e.message)),
} Type guard
fn leader_connectable(sel: &xai_grok_shell::leader::LeaderSelection) -> bool {
sel.socket_path().map(|p| p.exists()).unwrap_or(false)
} Try / catch
match connect_to_leader(args).await {
Ok((desc, client)) => { /* use client */ }
Err(e) => {
eprintln!("cannot reach leader: {e:#}. Start a grok session or `grok workspace start`.");
std::process::exit(1);
}
} Prevention
- Always start a grok session before leader-dependent CLI commands
- Validate target/environment names against known registrations
- Clean stale leader registrations after crashes
- Check the socket file exists before attempting LeaderClient::connect
When it happens
Trigger: Calling connect_to_leader (from run_leader_mgmt or connect_workspace_control) when resolve_leader_target returns an error whose .message becomes the entire error text — e.g. no leader recorded for the target environment, unknown target name, or corrupt/stale leader registry.
Common situations: No `grok` session running so nothing registered as leader; pointing the pager at the wrong environment name; leftover stale leader registration after a crash.
Related errors
- no running leader for this environment ({e}). Start a grok s
- resolved leader target did not include a socket path
- no target specified
- send failed: {body}
- screen query failed: {body}
AI-assisted analysis of xai-org/grok-build@bc7f02eddd (2026-08-31).
Data as JSON: /api/errors/8764d6811207c9c7.
Report an issue: GitHub.