Skip to main content

InjectRequest

Struct InjectRequest 

Source
pub struct InjectRequest {
Show 14 fields pub target_agent: String, pub message: String, pub source_agent: Option<String>, pub request_id: Option<String>, pub ts_secs: Option<i64>, pub jekt_sig: Option<String>, pub lan_sig: Option<String>, pub source_channel: Option<String>, pub channel_sig: Option<String>, pub source_uid: Option<String>, pub channel_sig_v2: Option<String>, pub lan_sig_v2: Option<String>, pub wan_sig: Option<String>, pub wan_source_host: Option<String>,
}
Expand description

POST /agentmux/reactive/inject — deliver a message to an agent.

Used by the SendMessage and Loop MCP tools.

Fields§

§target_agent: String§message: String§source_agent: Option<String>§request_id: Option<String>

Message id this jekt was signed under — required for jekt_sig to be verifiable (the signed material binds msgid, sender, target, and timestamp together). None when unsigned (e.g. AGENTMUX_JEKT_KEY wasn’t available — legacy/unverified, same as omitting jekt_sig).

§ts_secs: Option<i64>

Unix seconds this jekt was signed at — part of the signed material, not just a display timestamp. See agentmux_common::jekt_sign.

§jekt_sig: Option<String>

Base64 HMAC-SHA256 over (msgid, source_agent, target_agent, ts_secs, message), signed with the sender’s own AGENTMUX_JEKT_KEY. Absent when the sending agent has no key yet (first-ever send before one is provisioned) — srv treats an absent/invalid signature as unverified, not as an error, and downgrades trust accordingly rather than rejecting the message outright.

§lan_sig: Option<String>

Base64 Ed25519 signature over the same signed material as jekt_sig, produced with the sender’s own AGENTMUX_LAN_KEY (SPEC_JEKT_LAN_TIER_SIGNING_2026_08_15.md §2.3). Sent unconditionally alongside jekt_sig regardless of the message’s actual destination — this process can’t know in advance whether delivery will end up LAN, host, or WAN (that’s a server-side routing decision); srv only ever consults this field when it has independently determined delivery_tier == "lan", so it’s simply ignored otherwise. Absent under the same “no key yet” conditions as jekt_sig.

§source_channel: Option<String>

The sending instance’s channel id (AGENTMUX_CHANNEL, injected into the MCP env at spawn alongside the keys). Bound into channel_sig’s signed material (SPEC_JEKT_CROSS_CHANNEL_TRUST_2026_09_02.md §D5) so a signature minted in one channel can’t be replayed as the same agent speaking from another. Absent whenever channel_sig is.

§channel_sig: Option<String>

Base64 Ed25519 signature for the same-machine, different-instance (cross-channel) tier, produced with the sender’s own AGENTMUX_LAN_KEY over a domain-separated payload that also binds source_channel (agentmux_common::jekt_sign::sign_channel_jekt). Sent unconditionally for the same reason lan_sig is: srv only consults it once it has itself labelled the delivery channel. Absent under the same “no key yet” conditions as lan_sig.

§source_uid: Option<String>

Identity M4d-6 (SPEC_AGENT_IDENTITY_CARRIED_NOT_DERIVED_2026_09_23.md §6.5.10): the sending agent’s UID, as its MCP fetched it with its UID-keyed key (M4d-3). Bound into channel_sig_v2; a forwarding srv never sets or changes it. Absent when the sender has no UID key.

§channel_sig_v2: Option<String>

Base64 Ed25519 signature, made only with the sender’s UID-keyed LAN key, over the cross-channel material plus source_uid (agentmux_common::jekt_sign::sign_channel_jekt_v2). Verified by UID against the uid_public_key an instance published for it (M4d-5), so it proves which agent sent the jekt, not just which name. The v1 channel_sig is still sent beside it.

§lan_sig_v2: Option<String>

Identity M4d-6: base64 Ed25519 signature, made only with the sender’s UID-keyed LAN key, over the LAN material plus source_uid (agentmux_common::jekt_sign::sign_lan_jekt_v2). A receiver checks it only after the v1 lan_sig verified, and records the UID as claimed by that LAN path, never as verified attribution.

§wan_sig: Option<String>

Base64 Ed25519 signature for the general agent-to-agent WAN tier, produced with the sender’s own AGENTMUX_WAN_KEY — a different key from AGENTMUX_LAN_KEY — over a domain-separated payload (agentmux_common::jekt_sign::sign_wan_jekt). Sent unconditionally for the same reason lan_sig and channel_sig are: the sending process cannot know which tier srv will route the message over.

Nothing verifies this yet. Verification requires resolving (sender_account, source_agent) to exactly one published key, which waits on relay-side work tracked in the private cloud repo. The field is carried now so that keys are minted and propagating by the time a verifier exists — an agent only gets a key when it is spawned.

§wan_source_host: Option<String>

The sending machine’s host label (AGENTMUX_HOST_LABEL, injected at spawn). With source_channel this identifies which AgentMux instance under the sending account owns the keypair wan_sig was made with — one account can run the same agent name on several machines, and on several build channels of one machine, each with its own database and therefore its own key. Bound into the signed material, so a wrong value selects a key the signature cannot verify under rather than granting anything. Absent whenever wan_sig is.

Trait Implementations§

Source§

impl Clone for InjectRequest

Source§

fn clone(&self) -> InjectRequest

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for InjectRequest

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for InjectRequest

Source§

fn default() -> InjectRequest

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for InjectRequest

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for InjectRequest

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more