pub struct AgentInfo {
pub id: String,
pub agent: String,
pub project: String,
pub tmux_session: String,
pub state: AgentState,
pub unread_mail: u32,
pub pending_approvals: u32,
pub is_manager: bool,
pub display_name: Option<String>,
pub rate_limit_resets_at: Option<f64>,
pub reports_to: Option<String>,
}Expand description
Per-agent fields the UI reads to render the roster + drive selection / detail-pane streaming.
Fields§
§id: String<project>:<agent> — the canonical id used in teamctl send
targets, MCP tool calls, and reports_to chains.
agent: StringShort agent name within the project (the YAML key).
project: StringProject id this agent belongs to.
tmux_session: StringResolved tmux session name (<prefix><project>-<agent>) — fed
to the pane-capture call so the detail pane targets the right
session even when tmux_prefix rotates.
state: AgentStateProcess state — Running, Stopped, or Unknown per the
supervisor trait. Drives the primary glyph in the roster.
unread_mail: u32Count of mailbox messages addressed to this agent that haven’t
been ack’d yet. Surfaces the ✉ glyph when nonzero.
pending_approvals: u32Count of request_approval rows still in pending state for
this agent. Surfaces the ! glyph when nonzero (highest
priority — overrides the unread-mail glyph).
is_manager: booltrue for managers (is_manager: true in compose), used when
the roster wants to draw a tier separator. Read but unused in
PR-UI-2; kept on the struct so PR-UI-4’s approvals modal can
route based on tier without a second compose lookup.
display_name: Option<String>T-160: optional human-friendly label from
team-compose.yaml. When Some, the TUI renders this in place
of id everywhere an agent label surfaces to the operator
(roster, detail header, mailbox attribution, statusline,
approvals, compose modal). When None, label falls back to
id. The id stays canonical for routing/tmux/CLI.
rate_limit_resets_at: Option<f64>T-212: most recent rate-limit reset timestamp (unix epoch
seconds) for this agent, sourced from the rate_limits table
populated by teamctl rl-watch. None when rl-watch has
never recorded a resets_at for this agent. The TUI status
bar formats this against now() via
format_rate_limit_window to render “5m 12s” / “1h 23m” —
past timestamps render as None (no active limit).
reports_to: Option<String>T-211: short agent name (the YAML key in the manager’s project)
this agent reports to. None for top-level agents (no parent)
— they render at depth 0 in the Agents pane. When Some, the
renderer nests this row under its manager with a tree glyph.
Schema validation (team-core/src/validate.rs) guarantees the
referenced name resolves to an existing agent.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for AgentInfo
impl RefUnwindSafe for AgentInfo
impl Send for AgentInfo
impl Sync for AgentInfo
impl Unpin for AgentInfo
impl UnsafeUnpin for AgentInfo
impl UnwindSafe for AgentInfo
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more