pub struct AttentionEntry {
pub agent: String,
pub ts: u64,
pub event: Event,
pub project: String,
pub cwd: String,
pub pid: Option<u32>,
pub tmux_session: Option<String>,
pub tmux_pane: Option<String>,
pub message: Option<String>,
}Expand description
One entry stored per active agent session that is waiting on user attention.
Serialized as compact JSON to one file per session (keyed by session_id) under
${XDG_RUNTIME_DIR:-/tmp}/agent-status/. The bash precursor’s five original
field names (project, cwd, event, tmux_pane, ts) are preserved so
readers expecting that vocabulary still find what they need. tmux_pane is
now an Option<String> rather than the bash version’s required string with
an "" sentinel: empty strings deserialize to None, and None is omitted
when serializing. The struct has grown additional optional fields over time
(message, pid, tmux_session); each carries #[serde(default)] so
older state files lacking the field still load.
Fields§
§agent: StringStable identifier of the agent that wrote this entry (e.g. "claude-code").
ts: u64Unix timestamp (seconds) when the entry was written.
event: EventHook event the producing agent reported.
project: StringBasename of the project directory (typically the cwd’s last component).
cwd: StringAbsolute path of the project directory at the time the hook fired.
pid: Option<u32>PID of the agent process at the time the hook fired (typically getppid()
from inside the hook script — the claude/opencode/pi binary). Used to clean
up state files whose owning process has exited without firing its
session-end hook. Absent in entries written by older binaries; entries
without a pid are never auto-pruned.
tmux_session: Option<String>Name of the tmux session the hook fired from (the #S of the owning
pane), or None when the hook fired outside tmux or the lookup failed.
Preferred over project as the human-facing handle in the switcher
because it carries the full multi-worktree context. #[serde(default)]
lets entries written by older binaries (which lack this field)
deserialize as None.
tmux_pane: Option<String>Tmux pane id (such as %17), or None if the hook fired outside tmux.
#[serde(default)] lets entries written by older binaries (which
always emitted the field, possibly as "") still deserialize. The
empty_string_as_none deserializer normalizes the bash precursor’s
"" sentinel to None so callers only need to check one shape.
message: Option<String>Optional last-message text from the agent (e.g. Claude Code Notification’s message
field). Absent in the JSON when None; absent on entries written by older binaries.
Trait Implementations§
Source§impl Clone for AttentionEntry
impl Clone for AttentionEntry
Source§fn clone(&self) -> AttentionEntry
fn clone(&self) -> AttentionEntry
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AttentionEntry
impl Debug for AttentionEntry
Source§impl<'de> Deserialize<'de> for AttentionEntry
impl<'de> Deserialize<'de> for AttentionEntry
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>,
impl Eq for AttentionEntry
Source§impl PartialEq for AttentionEntry
impl PartialEq for AttentionEntry
Source§fn eq(&self, other: &AttentionEntry) -> bool
fn eq(&self, other: &AttentionEntry) -> bool
self and other values to be equal, and is used by ==.