pub struct TeamConfig {Show 25 fields
pub name: String,
pub agent: Option<String>,
pub workflow_mode: WorkflowMode,
pub board: BoardConfig,
pub standup: StandupConfig,
pub automation: AutomationConfig,
pub automation_sender: Option<String>,
pub external_senders: Vec<String>,
pub orchestrator_pane: bool,
pub orchestrator_position: OrchestratorPosition,
pub layout: Option<LayoutConfig>,
pub workflow_policy: WorkflowPolicy,
pub cost: CostConfig,
pub grafana: GrafanaConfig,
pub use_shim: bool,
pub use_sdk_mode: bool,
pub auto_respawn_on_crash: bool,
pub shim_health_check_interval_secs: u64,
pub shim_health_timeout_secs: u64,
pub shim_shutdown_timeout_secs: u32,
pub shim_working_state_timeout_secs: u64,
pub pending_queue_max_age_secs: u64,
pub event_log_max_bytes: u64,
pub retro_min_duration_secs: u64,
pub roles: Vec<RoleDef>,
}Fields§
§name: String§agent: Option<String>Team-level default agent backend. Individual roles can override this
with their own agent field. Resolution order:
role-level agent > team-level agent > “claude” (hardcoded default).
workflow_mode: WorkflowMode§board: BoardConfig§standup: StandupConfig§automation: AutomationConfig§automation_sender: Option<String>§external_senders: Vec<String>External senders (e.g. email-router, slack-bridge) that are allowed to message any role even though they are not team members.
orchestrator_pane: bool§orchestrator_position: OrchestratorPosition§layout: Option<LayoutConfig>§workflow_policy: WorkflowPolicy§cost: CostConfig§grafana: GrafanaConfig§use_shim: boolWhen true, agents are spawned as shim subprocesses instead of directly in tmux panes. The shim manages PTY, state classification, and message delivery over a structured channel.
use_sdk_mode: boolWhen true and use_shim is enabled, agents that support structured I/O
(Claude Code, Codex) communicate via JSON protocols instead of PTY
screen-scraping. Requires use_shim: true. Defaults to true.
auto_respawn_on_crash: boolWhen true and use_shim is enabled, crashed agents are automatically
respawned instead of escalating to the manager. This is the default
posture for unattended teams; disable it only for debugging or
deliberate manual supervision.
shim_health_check_interval_secs: u64Interval in seconds between Ping health checks sent to shim handles.
shim_health_timeout_secs: u64Seconds without a Pong response before a shim handle is considered stale.
shim_shutdown_timeout_secs: u32Seconds to wait for graceful shutdown before sending Kill.
shim_working_state_timeout_secs: u64Maximum seconds an agent can remain in “Working” state before being force-transitioned to Idle. Prevents permanent stalls where the shim state classifier gets stuck on “working” while the agent is actually idle. 0 or None disables the check. Default: 1800 (30 minutes).
pending_queue_max_age_secs: u64Maximum seconds a message can sit in the pending delivery queue before being force-delivered via inbox fallback. Prevents message loss when the target agent appears permanently busy. Default: 600 (10 minutes).
event_log_max_bytes: u64§retro_min_duration_secs: u64§roles: Vec<RoleDef>Implementations§
Source§impl TeamConfig
impl TeamConfig
pub fn role_def(&self, role_name: &str) -> Option<&RoleDef>
pub fn role_barrier_group(&self, role_name: &str) -> Option<&str>
pub fn orchestrator_enabled(&self) -> bool
Sourcepub fn resolve_agent(&self, role: &RoleDef) -> Option<String>
pub fn resolve_agent(&self, role: &RoleDef) -> Option<String>
Resolve the effective agent for a role.
Resolution order: role-level agent > team-level agent > “claude”.
Sourcepub fn can_talk(&self, from_role: &str, to_role: &str) -> bool
pub fn can_talk(&self, from_role: &str, to_role: &str) -> bool
Check if a role is allowed to send messages to another role.
Uses talks_to if configured. If talks_to is empty for a role,
falls back to the default hierarchy:
- User <-> Architect
- Architect <-> Manager
- Manager <-> Engineer
The from and to are role definition names (not member instance names).
“human” is always allowed to talk to any role.
Sourcepub fn validate_verbose(&self) -> Vec<ValidationCheck>
pub fn validate_verbose(&self) -> Vec<ValidationCheck>
Run all validation checks, collecting results for each check. Returns a list of (check_name, passed, detail) tuples.
Sourcepub fn backend_health_results(&self) -> Vec<(String, BackendHealth)>
pub fn backend_health_results(&self) -> Vec<(String, BackendHealth)>
Collect unique configured backends and their health status.
Sourcepub fn check_backend_health(&self) -> Vec<String>
pub fn check_backend_health(&self) -> Vec<String>
Return warning messages for any unhealthy backends.
Trait Implementations§
Source§impl Clone for TeamConfig
impl Clone for TeamConfig
Source§fn clone(&self) -> TeamConfig
fn clone(&self) -> TeamConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TeamConfig
impl Debug for TeamConfig
Source§impl<'de> Deserialize<'de> for TeamConfig
impl<'de> Deserialize<'de> for TeamConfig
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for TeamConfig
impl RefUnwindSafe for TeamConfig
impl Send for TeamConfig
impl Sync for TeamConfig
impl Unpin for TeamConfig
impl UnsafeUnpin for TeamConfig
impl UnwindSafe for TeamConfig
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.