<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.18 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC7252 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml">
<!ENTITY RFC6690 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6690.xml">
<!ENTITY RFC7641 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7641.xml">
<!ENTITY RFC7228 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7228.xml">
<!ENTITY RFC8288 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8288.xml">
<!ENTITY RFC8428 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8428.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8520 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8520.xml">
<!ENTITY RFC8949 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
<!ENTITY RFC9200 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9200.xml">
<!ENTITY RFC9421 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9421.xml">
<!ENTITY RFC9457 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9457.xml">
<!ENTITY RFC8340 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8340.xml">
<!ENTITY RFC9176 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9176.xml">
<!ENTITY I-D.ietf-core-problem-details SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-problem-details.xml">
<!ENTITY I-D.ietf-httpapi-api-catalog SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-httpapi-api-catalog.xml">
]>


<rfc ipr="trust200902" docName="draft-jimenez-t2trg-iot-agent-01" category="info" submissionType="IRTF">
  <front>
    <title abbrev="IoT Agent">Agentic AI Operation of Constrained RESTful Environments</title>

    <author initials="J." surname="Jimenez" fullname="Jaime Jimenez">
      <organization>Ericsson</organization>
      <address>
        <email>jaime@iki.fi</email>
      </address>
    </author>

    <date year="2026" month="July" day="03"/>

    <area>T2TRG</area>
    <workgroup>Thing-to-Thing Research Group</workgroup>
    <keyword>IoT</keyword> <keyword>AI</keyword> <keyword>agent</keyword> <keyword>CoAP</keyword> <keyword>HATEOAS</keyword> <keyword>LLM</keyword>

    <abstract>


<?line 53?>

<t>This document describes an architecture for AI agents that autonomously
discover, interpret, and interact with Internet of Things (IoT) devices
using the Constrained Application Protocol (CoAP) and hypermedia-driven
patterns. It defines how a Large Language Model (LLM) based agent
decomposes high-level user intents into concrete device interactions
without requiring pre-configured device knowledge, relying instead on
in-band resource discovery, CoRE Link Format metadata, and Semantic
Definition Format (SDF) models. The document covers resource discovery,
normalized representation for agent consumption, tool interfaces,
observation patterns for closed-loop automation, web-based monitoring
interfaces, and security considerations.</t>



    </abstract>



  </front>

  <middle>


<?line 67?>

<section anchor="introduction"><name>Introduction</name>

<t>Traditional IoT client implementations require embedded programming
expertise and protocol-specific knowledge. Each new device type demands
custom integration code, particularly for constrained nodes <xref target="RFC7228"/>
where resources are limited. This document proposes an alternative: AI
agents powered by Large Language Models (LLMs) that dynamically discover
and interact with IoT devices using existing IETF protocols, requiring
only a network entry point.</t>

<t>The core insight is that CoAP <xref target="RFC7252"/> devices already expose
RESTful interfaces with machine-readable metadata via CoRE Link Format
<xref target="RFC6690"/> and Web Linking <xref target="RFC8288"/>. An LLM-based agent can parse
this metadata, reason about device capabilities, and construct valid
protocol interactions, much like a web browser navigates HTML pages
using hyperlinks.</t>

<t>This approach applies the Hypermedia as the Engine of Application State
(HATEOAS) principle to IoT: the agent needs no a priori knowledge of
specific devices. It discovers capabilities in-band and adapts its
behavior accordingly.</t>

<section anchor="terminology"><name>Terminology</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<dl>
  <dt>IoT Agent:</dt>
  <dd>
    <t>A software system that uses an LLM to reason about user intents,
plan actions, and execute them by interacting with IoT devices via
CoAP.</t>
  </dd>
  <dt>User Intent:</dt>
  <dd>
    <t>A high-level natural language expression of a desired outcome
(e.g., "it is too hot") that the agent decomposes into device
interactions.</t>
  </dd>
  <dt>Resource Bookmark:</dt>
  <dd>
    <t>A cached representation of discovered CoAP resources with enriched
metadata suitable for agent consumption.</t>
  </dd>
  <dt>Tool:</dt>
  <dd>
    <t>A function exposed to the LLM agent that performs a specific
protocol operation (e.g., GET, PUT, Observe) on a CoAP resource.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="architecture"><name>Architecture</name>

<t>The IoT Agent architecture consists of four layers:</t>

<figure><artwork><![CDATA[
+----------------------------------------------------------+
|                    User Interface                         |
|            (Natural Language / Dashboard / CLI)            |
+----------------------------------------------------------+
|                    Agent Core (LLM)                       |
|    Intent Decomposition + Planning + Code Generation      |
+----------------------------------------------------------+
|                    Tool Layer                             |
|  Core: list | get | set | observe | system_state         |
|  Extended: watch | history                               |
+----------------------------------------------------------+
|                  Protocol Layer                           |
|              CoAP Client + Discovery                      |
+----------------------------------------------------------+
|                  Device Layer                             |
|     CoAP Servers with SDF Self-Descriptions               |
+----------------------------------------------------------+
]]></artwork></figure>

<section anchor="agent-core"><name>Agent Core</name>

<t>The agent core is a Code Agent based on the ReAct (Reasoning and
Acting) pattern. Given a user intent, the agent:</t>

<t><list style="numbers" type="1">
  <t>Reasons about the intent using the LLM.</t>
  <t>Generates executable Python code that calls the available tools.</t>
  <t>Observes the results and iterates if needed.</t>
  <t>Produces a final answer summarizing the actions taken.</t>
</list></t>

<t>The agent operates with a bounded planning interval and a maximum
step limit to prevent unbounded execution. Empirically, a planning
interval of 3 steps and a limit of 6 steps works well for
environments with tens of devices. Frequent replanning wastes
tokens on introspection rather than action; a domain-specific
planning template that assumes device knowledge is already available
outperforms generic agent templates.</t>

<section anchor="prompt-grounding"><name>Prompt Grounding</name>

<t>At startup, the agent runs resource discovery and injects a
structured device summary into the system prompt. The format is
inspired by YANG tree diagrams <xref target="RFC8340"/>:</t>

<figure><artwork><![CDATA[
DEVICES:
+-- Living Room [5683]
|  +--ro temperature  Cel -20..85
|  +--rw thermostat   Cel 0..35
|  +--rw light        lx  0..1000
|  +--rw blinds       %   0..100
|  +--ro motion       bool
+-- Bedroom [5689]
|  +--ro temperature  Cel -20..85
|  +--rw thermostat   Cel 0..35
]]></artwork></figure>

<t>This grounding eliminates the need for the agent to call
list_resources() on routine tasks. The LLM knows every device,
room, port, unit, and valid range from the first message. In
testing, prompt grounding reduced invalid tool calls from roughly
1 in 3 to fewer than 1 in 20.</t>

<t>Only this compact summary is injected, not the full SDF
self-description of each device; the per-device cost is a single
tree line. Nonetheless, the summary grows linearly with the device
count and the approach does not scale to arbitrarily large
inventories. The point at which it becomes impractical is
deployment-dependent, determined by the model's context window
relative to the number of devices and the size of the remaining
prompt. Beyond that point, implementations <bcp14>SHOULD NOT</bcp14> inject the
full inventory. Two fallback strategies apply:</t>

<t><list style="symbols">
  <t>Scope the injected summary to the rooms and resource types
relevant to the current intent, rather than the whole home. This
reuses the scoped tool-selection guardrail described in
<xref target="execution-guardrails"/>.</t>
  <t>Fall back to on-demand discovery: inject only a high-level index
(rooms and resource types present) and let the agent retrieve
detail through list_resources and get_resource as needed. This
trades additional tool calls for a bounded prompt size.</t>
</list></t>

</section>
<section anchor="port-qualified-resource-names"><name>Port-Qualified Resource Names</name>

<t>Resources are addressed by name (e.g., "temperature") or by
port-qualified name (e.g., "5689/temperature") to target a specific
room. When the agent calls get_resource("temperature") without a
port qualifier, the tool returns values from ALL rooms. When it
calls set_resource("5689/thermostat", "22"), only the Bedroom
thermostat is modified. This convention avoids the need for
room-specific tools while preserving precision.</t>

</section>
</section>
<section anchor="device-layer"><name>Device Layer</name>

<t>IoT devices are CoAP servers <xref target="RFC7252"/> that expose resources at
well-known URI paths. Each device:</t>

<t><list style="symbols">
  <t>Serves a <spanx style="verb">/.well-known/core</spanx> resource per <xref target="RFC6690"/> for discovery.</t>
  <t>Exposes sensor resources (read-only, observable) and actuator
resources (read-write, observable).</t>
  <t>Provides SDF models <xref target="SDF"/> at <spanx style="verb">/{resource}/sdf</spanx> endpoints
describing resource semantics, units, ranges, room assignment,
and available actions.</t>
  <t>Supports the Observe option <xref target="RFC7641"/> for push notifications.</t>
</list></t>

<t>The reference implementation includes 13 device types deployed
across 7 rooms as an example environment. The architecture supports
any CoAP device that follows the discovery and self-description
patterns described below.</t>

<t>Devices use JSON payloads following the SenML data model <xref target="RFC8428"/>
with a common structure:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "n": "temperature",
  "v": 24.5,
  "u": "Cel",
  "t": 1713000000,
  "status": "ready"
}
]]></sourcecode></figure>

<t>The "t" field is a Unix timestamp of the last reading. The "status"
field indicates whether the device is "ready" for new commands or
"adjusting" (currently processing a previous command).</t>

<section anchor="sdf-self-description"><name>SDF Self-Description</name>

<t>Each resource exposes an SDF model at <spanx style="verb">/{resource}/sdf</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "sdfObject": {
    "Temperature": {
      "sdfProperty": {
        "value": {
          "type": "number",
          "minimum": -20,
          "maximum": 85,
          "unit": "Cel",
          "description": "Current temperature reading"
        }
      }
    }
  },
  "location": {
    "room": "Living Room"
  }
}
]]></sourcecode></figure>

<t>Two GET requests per device (discovery + SDF) give the agent
everything it needs: name, type, unit, range, room, and available
actions. The device communicates its full capabilities through
standard protocol metadata.</t>

</section>
</section>
</section>
<section anchor="resource-discovery"><name>Resource Discovery</name>

<section anchor="initial-discovery"><name>Initial Discovery</name>

<t>On startup, the agent performs CoAP resource discovery by sending
GET requests to <spanx style="verb">/.well-known/core</spanx> on all detected CoAP server
ports. The response is in CoRE Link Format <xref target="RFC6690"/>:</t>

<figure><artwork><![CDATA[
</temperature>;rt="temperature-c";if="core.s";ct=50;obs,
</thermostat>;rt="temperature-c";if="core.a";ct=50;obs,
</sdf/temperature>;rt="sdf";ct=50,
</sdf/thermostat>;rt="sdf";ct=50
]]></artwork></figure>

</section>
<section anchor="metadata-enrichment"><name>Metadata Enrichment</name>

<t>Raw CoRE Link Format is insufficient for LLM consumption. The agent
enriches each discovered resource by:</t>

<t><list style="numbers" type="1">
  <t>Parsing link attributes (rt, if, ct, obs).</t>
  <t>Fetching the SDF model from the corresponding <spanx style="verb">/sdf/*</spanx> endpoint.</t>
  <t>Extracting human-readable descriptions, units, value ranges, and
available actions from the SDF model.</t>
  <t>Constructing a normalized bookmark entry.</t>
</list></t>

<t>A normalized resource bookmark entry contains:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "name": "temperature",
  "uri": "coap://[::1]:5683/temperature",
  "type": "temperature-c",
  "if": "core.s",
  "unit": "Cel",
  "obs": true,
  "description": "Temperature sensor, degrees Celsius.",
  "available_requests": ["GET"],
  "min": -20,
  "max": 85
}
]]></sourcecode></figure>

<t>This normalized format bridges the gap between compact IoT
representations and the verbose, descriptive input that LLMs require
for accurate reasoning.</t>

</section>
<section anchor="dynamic-discovery"><name>Dynamic Discovery</name>

<t>The agent monitors for new devices by periodically scanning for
CoAP servers. When new servers appear or existing ones disappear,
the discovery process runs again and bookmarks are updated. If a
dashboard is connected, updated device configurations are pushed
to all clients.</t>

<t>Discovery <bcp14>SHOULD</bcp14> be parallelized: probing all candidate endpoints
concurrently and fetching SDF models concurrently reduces discovery
time significantly compared to sequential approaches.</t>

</section>
</section>
<section anchor="tool-interface"><name>Tool Interface</name>

<t>The agent interacts with IoT devices exclusively through a defined
set of tools. Each tool maps to one or more CoAP operations. The
tools are divided into core protocol tools and extended tools.</t>

<section anchor="core-tools"><name>Core Tools</name>

<t>These map directly to CoAP protocol operations:</t>

<section anchor="listresources"><name>list_resources</name>

<t>Returns all discovered resources with their metadata from cached
bookmarks. The agent rarely needs to call this because the device
summary is injected into the system prompt at startup.</t>

</section>
<section anchor="getresource"><name>get_resource</name>

<t>Performs a CoAP GET on a named resource. Accepts plain names
("temperature") to read all rooms, or port-qualified names
("5689/temperature") to target a specific room. Returns the
current value, unit, timestamp, and status.</t>

</section>
<section anchor="set-resource"><name>set_resource</name>

<t>Performs a CoAP PUT on a named actuator resource. Only resources
with interface type "core.a" or SDF actions can be modified.</t>

<t>Verification is performed by the tool itself rather than delegated
to the agent. After the PUT, set_resource issues a read-back GET and
returns a structured result reporting the previous value, the
requested value, the observed value, and whether the two converged:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "resource": "5689/thermostat",
  "requested": 22,
  "previous": 19,
  "observed": 22,
  "converged": true
}
]]></sourcecode></figure>

<t>Enforcing verification in the tool avoids relying on the LLM to
consistently issue a follow-up get_resource, which is fragile in the
presence of hallucination (see <xref target="hallucination-induced-actions"/>).
For actuators that settle over time rather than immediately, the
tool reports converged=false and the agent <bcp14>SHOULD</bcp14> use
observe_resource with an ideal_value to await convergence. If
set_resource returns an error or converged=false after settling, the
agent retries with corrected input.</t>

</section>
<section anchor="observeresource"><name>observe_resource</name>

<t>Registers a CoAP Observe <xref target="RFC7641"/> subscription on a resource.
Supports an optional ideal_value parameter; when provided, the
observation continues until the sensor reading converges within
a tolerance of 0.5 units of the target. This enables closed-loop
verification: set a thermostat to 22, then observe temperature
until it reaches 22 +/- 0.5.</t>

</section>
<section anchor="getsystemstate"><name>get_system_state</name>

<t>Returns the current state of ALL devices in one call. Each entry
includes room, resource name, value, unit, and timestamp. Used
when the user asks for a general status or home overview. More
efficient than calling get_resource per device.</t>

</section>
</section>
<section anchor="extended-tools"><name>Extended Tools</name>

<t>These provide higher-level abstractions built on the core tools:</t>

<section anchor="watchresource"><name>watch_resource</name>

<t>Starts a persistent watch on a sensor across all instances of that
resource type. Uses CoAP Observe internally but buffers changes and
synthesizes them into natural language notifications via the LLM.
Changes are debounced to batch simultaneous events into a single
coherent notification.</t>

</section>
<section anchor="getsensorhistory"><name>get_sensor_history</name>

<t>Returns time-series data for a sensor type, grouped by room.
The system maintains a bounded history of recent readings per
device. Useful for trend analysis and anomaly detection.</t>

</section>
<section anchor="observechangingresource"><name>observe_changing_resource</name>

<t>Monitors a resource's "status" field. Used before set_resource
when a device is currently "adjusting" from a previous command,
ensuring the agent waits for "ready" status before issuing new
commands. Prevents conflicts in multi-user scenarios.</t>

</section>
<section anchor="stopobserving-unwatchresource"><name>stop_observing / unwatch_resource</name>

<t>Cancel active Observe subscriptions or persistent watches.</t>

</section>
</section>
<section anchor="tool-design-rationale"><name>Tool Design Rationale</name>

<t>The core tools map to CoAP verbs: Discover (list_resources), GET
(get_resource), PUT (set_resource), Observe (observe_resource).
This means the same four tools work for any CoAP device regardless
of type. Adding a new device to the network requires zero tool
changes; the device's self-description tells the agent what it can
do.</t>

<t>The extended tools exist because certain interaction patterns
(persistent monitoring, historical analysis, batch status) require
state management that a single CoAP operation cannot provide. They
are implemented above the protocol layer and maintain their own
state.</t>

</section>
</section>
<section anchor="agent-interaction-patterns"><name>Agent Interaction Patterns</name>

<section anchor="intent-decomposition"><name>Intent Decomposition</name>

<t>When a user says "it is too hot", the agent:</t>

<t><list style="numbers" type="1">
  <t>Consults the device summary in its system prompt to identify
available temperature sensors and thermostats.</t>
  <t>Calls get_resource("temperature") to read the current temperature.</t>
  <t>Reasons about a comfortable target (e.g., 22 Cel) based on the
LLM's general knowledge.</t>
  <t>Calls set_resource("thermostat", "22") to adjust.</t>
  <t>Calls observe_resource("temperature", ideal_value=22) to confirm.</t>
  <t>Returns a final answer summarizing the actions.</t>
</list></t>

</section>
<section anchor="execution-history-and-similarity-matching"><name>Execution History and Similarity Matching</name>

<t>The agent maintains an execution history that maps user intents to
the code that resolved them, along with the system state at execution
time. For subsequent similar requests, the agent:</t>

<t><list style="numbers" type="1">
  <t>Computes a semantic similarity score between the new intent and
stored intents using embedding vectors.</t>
  <t>If a match exceeds the threshold, presents the cached code and
predicted result to the user for approval.</t>
  <t>On approval, executes the cached code directly, reducing latency
and token consumption.</t>
</list></t>

<t>This pattern is analogous to HTTP caching: previously computed
responses are reused when the request and context match.</t>

</section>
<section anchor="actuator-classification"><name>Actuator Classification</name>

<t>Whether the agent may act on an actuator autonomously or must first
obtain explicit user confirmation depends on the actuator's effect,
not on the agent's confidence. Actuators are classified into three
tiers:</t>

<t><list style="symbols">
  <t><strong>Autonomous.</strong> Comfort and ambient actuators whose effects are
bounded and reversible, such as thermostats within safe bounds,
lights, and blinds. A closed-loop agent <bcp14>MAY</bcp14> actuate these without
per-action user confirmation, provided the device enforces
independent safety bounds (see <xref target="physical-safety"/>) and every
action is logged (see <xref target="data-provenance"/>).</t>
  <t><strong>Confirmation-required.</strong> Safety- or security-critical actuators
such as locks and alarms, and any actuator whose effect is
irreversible or bears on physical safety. The agent <bcp14>MUST</bcp14> obtain
explicit user confirmation for each action on these actuators,
including when operating in closed-loop mode.</t>
  <t><strong>Restricted.</strong> Actuators not exposed to the agent for the current
intent, per the scoped tool-selection guardrail (see
<xref target="execution-guardrails"/>).</t>
</list></t>

<t>The tier of an actuator is derived from its self-description (SDF
action semantics, interface type) together with deployment policy.
This classification reconciles the autonomous operation described in
<xref target="closed-loop-automation"/> with the confirmation requirements in
<xref target="execution-guardrails"/> and <xref target="physical-safety"/>: autonomy applies
only to the Autonomous tier.</t>

</section>
<section anchor="closed-loop-automation"><name>Closed-Loop Automation</name>

<t>The agent supports continuous monitoring through the Observe pattern.
Closed-loop operation is confined to the Autonomous tier of
<xref target="actuator-classification"/>; actions on Confirmation-required
actuators are gated on explicit user confirmation even in this mode.
A closed-loop agent:</t>

<t><list style="numbers" type="1">
  <t>Maintains user preference files (comfort zones for temperature,
light, air quality).</t>
  <t>Watches preference files for changes.</t>
  <t>When preferences change or sensor readings drift outside comfort
zones, automatically triggers corrective actions on Autonomous-tier
actuators.</t>
  <t>Logs all autonomous actions for accountability.</t>
</list></t>

</section>
</section>
<section anchor="web-dashboard"><name>Web Dashboard</name>

<t>A web-based dashboard can serve as both a monitoring interface and
an alternative interaction channel for the agent. The architectural
pattern involves:</t>

<t><list style="symbols">
  <t>A server that polls CoAP devices periodically and maintains
current state.</t>
  <t>A push channel (e.g., WebSocket) that broadcasts state changes
to connected user interfaces in real time.</t>
  <t>Multiple visualization modes: spatial (floor plan), tabular
(device grid), and temporal (time-series charts for historical
sensor data).</t>
  <t>An embedded chat interface that routes natural language to the
same agent core, giving the agent access to both real-time state
and historical data.</t>
</list></t>

<t>The key architectural decision is that device discovery, sensor
state, and agent chat messages all flow through the same push
channel as typed messages. This keeps the client simple: it
subscribes once and renders whatever message types arrive.</t>

<t>Historical data is maintained as a bounded buffer of recent
readings per device. This data is accessible both through the
dashboard's visualization layer and through the agent's tool
interface, enabling the agent to reason about trends and anomalies
without requiring a separate time-series database.</t>

</section>
<section anchor="normalized-representation"><name>Normalized Representation</name>

<t>A key challenge is that IoT devices optimize for compression (CBOR
<xref target="RFC8949"/>, compact link format), while LLMs require verbose,
descriptive text. The normalization layer:</t>

<t><list style="symbols">
  <t>Converts CoRE Link Format attributes to natural language
descriptions.</t>
  <t>Expands SDF model fields into human-readable capability
descriptions.</t>
  <t>Annotates resources with available CoAP methods (GET, PUT).</t>
  <t>Includes unit information and value ranges.</t>
</list></t>

<t>This normalization is performed once at discovery time and cached in
the resource bookmarks.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="agent-identity"><name>Agent Identity</name>

<t>The agent acts as a CoAP client on behalf of a user. In deployments
where device access control is enforced, the agent <bcp14>MUST</bcp14> authenticate
using appropriate credentials. The ACE framework <xref target="RFC9200"/> provides
OAuth-based authorization for constrained environments.</t>

<t>Future work should address a standardized agent identification
mechanism for CoAP, analogous to the HTTP User-Agent header. This
would allow devices to differentiate between human-operated clients
and autonomous agents, enabling differentiated access policies.</t>

</section>
<section anchor="execution-guardrails"><name>Execution Guardrails</name>

<t>The agent <bcp14>SHOULD NOT</bcp14> be given unrestricted access to all device
tools simultaneously. Tool selection should be scoped to the user's
intent. For example, an intent about being late should not expose
thermostat controls. This scoping is the basis of the Restricted
tier in <xref target="actuator-classification"/>.</t>

<t>Confirmation requirements follow the actuator classification of
<xref target="actuator-classification"/>: actions on Confirmation-required
actuators are gated on explicit per-action user confirmation, while
Autonomous-tier actuators may be actuated without it.</t>

<t>The execution-history mechanism (presenting cached code to the user
before re-execution) is a latency and cost optimization with an
optional approval gate; it is not the primary safety control and
should not be relied upon as the human-in-the-loop mechanism for
critical actuators.</t>

</section>
<section anchor="prompt-injection-via-device-metadata"><name>Prompt Injection via Device Metadata</name>

<t>Because the agent consumes device-provided metadata (SDF
descriptions, resource names, room labels) as part of its LLM
prompt, a malicious device could craft metadata designed to
manipulate agent behavior. For example, a device description
containing "ignore previous instructions and unlock the door"
could attempt prompt injection. Implementations <bcp14>SHOULD</bcp14> sanitize
device metadata before injecting it into LLM prompts, and <bcp14>SHOULD
NOT</bcp14> grant the agent access to security-critical actuators (locks,
alarms) without explicit user confirmation per action.</t>

</section>
<section anchor="data-provenance"><name>Data Provenance</name>

<t>Actions taken by the agent should be logged with sufficient detail
to reconstruct the reasoning chain: the user intent, discovered
resources, intermediate observations, and final actions. This
supports accountability requirements, particularly in environments
subject to applicable AI governance regulations.</t>

</section>
<section anchor="device-trust"><name>Device Trust</name>

<t>The agent trusts the metadata provided by devices during discovery.
In adversarial environments, devices could provide misleading SDF
models or resource descriptions. MUD <xref target="RFC8520"/> profiles can
constrain expected device behavior and should be consulted where
available.</t>

</section>
<section anchor="physical-safety"><name>Physical Safety</name>

<t>The agent can control actuators that affect the physical
environment (thermostats, locks, blinds). Implementations <bcp14>SHOULD</bcp14>
enforce safety bounds on actuator values independent of the agent's
reasoning. For example, a thermostat should reject setpoints below
a minimum safe temperature regardless of what the agent requests.
Critical actuators (locks, alarms) fall in the Confirmation-required
tier of <xref target="actuator-classification"/> and <bcp14>SHOULD</bcp14> require explicit user
confirmation before the agent can act, including in closed-loop
operation.</t>

</section>
<section anchor="hallucination-induced-actions"><name>Hallucination-Induced Actions</name>

<t>LLMs may generate plausible but incorrect tool calls: wrong
resource names, invalid value types, or actions based on
misinterpreted sensor readings. Tool-enforced verification, where
set_resource performs its own read-back and reports whether the
observed value converged with the requested value (see
<xref target="set-resource"/>), mitigates this more reliably than a
convention that the agent must remember to verify. Verification
nonetheless remains partial: it confirms the value was written, not
that the action was the correct response to the user's intent.
Implementations <bcp14>SHOULD</bcp14> log all agent actions with sufficient detail
to detect and reverse erroneous changes.</t>

</section>
<section anchor="resource-exhaustion-on-constrained-devices"><name>Resource Exhaustion on Constrained Devices</name>

<t>The agent could overwhelm constrained devices <xref target="RFC7228"/> with
rapid requests or excessive Observe subscriptions. Implementations
<bcp14>SHOULD</bcp14> respect CoAP congestion control mechanisms (<xref target="RFC7252"/>
Section 4.7) and limit the number of concurrent Observe
subscriptions per device.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions.</t>

</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author thanks Duc Tung Nguyen for implementation work on the
agent framework, Carsten Bormann for guidance on CoRE protocol
usage, Mingzhe Xing for a detailed review that shaped the actuator
classification, tool-enforced verification, and scalability
discussion in this revision, and the T2TRG research group for
feedback on the initial presentation at IETF 123.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

&RFC7252;
&RFC6690;
&RFC7641;
&RFC7228;
&RFC8288;
&RFC8428;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

&RFC8520;
&RFC8949;
&RFC9200;
&RFC9421;
&RFC9457;
&RFC8340;
&RFC9176;
&I-D.ietf-core-problem-details;
&I-D.ietf-httpapi-api-catalog;
<reference anchor="SDF" target="https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf/">
  <front>
    <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="WOT-TD" target="https://www.w3.org/TR/wot-thing-description11/">
  <front>
    <title>Web of Things (WoT) Thing Description 1.1</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="MCP" target="https://spec.modelcontextprotocol.io/">
  <front>
    <title>Model Context Protocol Specification</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="SMOLAGENTS" target="https://github.com/huggingface/smolagents">
  <front>
    <title>smolagents: a barebones library for agents</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="AIOCOAP" target="https://github.com/chrysn/aiocoap">
  <front>
    <title>aiocoap: Python CoAP library</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 693?>

<section anchor="implementation-status"><name>Implementation Status</name>

<t>A reference implementation is available. It uses:</t>

<t><list style="symbols">
  <t>smolagents <xref target="SMOLAGENTS"/> as the agent framework with ReAct pattern
and code generation.</t>
  <t>aiocoap <xref target="AIOCOAP"/> as the CoAP client and server library.</t>
  <t>Azure OpenAI GPT-4o as the primary LLM backend, with support for
local models via Ollama (tested: Qwen 2.5 Coder 32B, GLM-4,
Llama 3.1 70B, among others).</t>
  <t>Native subprocess launching via uv for CoAP device simulation
(24 servers across 7 rooms).</t>
  <t>A web dashboard (FastAPI + WebSocket) with real-time device
monitoring, floor plan visualization, 3D view, historical
time-series charts, and an embedded chat agent.</t>
  <t>An interactive CoAP CLI shell with auto-discovery, tab completion,
syntax-highlighted JSON output, and multi-room queries.</t>
</list></t>

<t>The implementation has been demonstrated at IETF 123 (T2TRG session),
IETF 124 (hackathon), RIOT Summit 2025, and IMT Atlantique.</t>

<t><list style="symbols">
  <t>IETF 123 T2TRG session recording:
https://youtu.be/7y4fBymxKDI?t=4780</t>
  <t>IETF 123 slides:
https://datatracker.ietf.org/meeting/123/materials/slides-123-t2trg-agentic-ai-operation-of-iot-systems-00</t>
  <t>Updated slides:
https://ietf.jaime.win/building-agentic-iot-systems.pdf</t>
</list></t>

<t>Testing with Class 1 and Class 2 constrained hardware <xref target="RFC7228"/>
is planned. The CoAP protocol stack is not simulated in the
reference implementation, so the transition to real hardware
requires no agent-side changes.</t>

</section>
<section anchor="relationship-to-existing-work"><name>Relationship to Existing Work</name>

<t>This document builds on and references:</t>

<t><list style="symbols">
  <t>CoAP <xref target="RFC7252"/>: Transport protocol for constrained devices.</t>
  <t>CoRE Link Format <xref target="RFC6690"/>: Resource discovery mechanism.</t>
  <t>CoAP Observe <xref target="RFC7641"/>: Push notification pattern.</t>
  <t>CoRE Resource Directory <xref target="RFC9176"/>: Centralized resource discovery
for constrained networks, complementary to the direct discovery
approach used here.</t>
  <t>SDF <xref target="SDF"/>: Semantic device descriptions.</t>
  <t>Problem Details <xref target="RFC9457"/> and <xref target="I-D.ietf-core-problem-details"/>:
Structured error reporting enabling agent error recovery.</t>
  <t>API Catalog <xref target="I-D.ietf-httpapi-api-catalog"/>: Service discovery
pattern extensible to agent use cases.</t>
  <t>HTTP Message Signatures <xref target="RFC9421"/>: Relevant for agent
authentication in web contexts.</t>
  <t>ACE <xref target="RFC9200"/>: Authorization framework for constrained
environments.</t>
  <t>MUD <xref target="RFC8520"/>: Device behavior profiling.</t>
</list></t>

<t>The architecture is not bound to SDF for device self-description.
W3C WoT Thing Descriptions <xref target="WOT-TD"/> provide equivalent
affordance-based metadata (properties, actions, events) and could
serve the same role in the agent's discovery and metadata enrichment
pipeline.</t>

<t>The Model Context Protocol (MCP) <xref target="MCP"/> standardizes how LLM agents
call tools. The tool interface described in this document could be
exposed as MCP tools. However, MCP assumes one tool definition per
capability, while the CoAP approach uses generic protocol tools that
discover capabilities at runtime. The two approaches are complementary:
MCP for the agent-tool interface, CoAP for the tool-device interface.</t>

</section>
<section anchor="open-questions"><name>Open Questions</name>

<t><list style="numbers" type="1">
  <t>How should the agent handle CBOR-encoded payloads natively without
JSON conversion overhead?</t>
  <t>What is the optimal planning interval for different IoT environment
sizes (few devices vs. hundreds)? Our testing suggests 3 steps for
environments under 30 devices.</t>
  <t>Should the agent expose its own execution state as a CoAP resource
for monitoring by other agents or management systems?</t>
  <t>How to handle CoAP multicast discovery in IPv6 mesh networks where
response aggregation is needed?</t>
  <t>What attestation mechanisms should bind agent identity to its
runtime configuration (loaded tools, model version)?</t>
  <t>Can Matter protocol devices expose their cluster definitions at
runtime in a way that agents can consume, similar to CoAP's
.well-known/core + SDF pattern?</t>
  <t>How should historical sensor data be exposed as a standard CoAP
resource pattern rather than an application-specific buffer?</t>
  <t>How should the execution history cache be invalidated when the
device topology changes (devices added, removed, or relocated)?</t>
</list></t>

</section>
<section anchor="local-model-evaluation"><name>Local Model Evaluation</name>

<t>Not every deployment can rely on cloud-hosted LLMs. The reference
implementation was tested with multiple local models via Ollama
across three tasks of increasing difficulty: list all devices, read
a specific sensor, and compare values across rooms.</t>

<texttable>
      <ttcol align='left'>Model</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>List</ttcol>
      <ttcol align='left'>Read</ttcol>
      <ttcol align='left'>Compare</ttcol>
      <ttcol align='left'>Notes</ttcol>
      <c>GPT-4o (Azure)</c>
      <c>cloud</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Reference</c>
      <c>GLM-4-flash</c>
      <c>30B</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Best local</c>
      <c>Qwen 3</c>
      <c>8B</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Best size/perf</c>
      <c>Llama 3.1 70B</c>
      <c>70B</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Weak</c>
      <c>Needs quantization</c>
      <c>Mistral Small</c>
      <c>24B</c>
      <c>Pass</c>
      <c>Pass</c>
      <c>Fail</c>
      <c>Hallucinated URIs</c>
      <c>Phi-4</c>
      <c>15B</c>
      <c>Fail</c>
      <c>Fail</c>
      <c>Fail</c>
      <c>Wrong dict keys</c>
</texttable>

<t>The key finding is that IETF protocol specifications (CoAP, CoRE
Link Format) are present in the training data of every major LLM.
The bottleneck for local models is code generation quality, not
protocol knowledge. Models that cannot write defensive Python
(handling None values, mixed dict schemas, missing keys) fail on
the compare task even when they understand CoAP semantics correctly.</t>

<t>The common failure mode: models index device response dicts with
wrong keys, receive a KeyError, and loop on the same error without
recovering. Models with strong self-correction (GPT-4o, GLM-4)
detect the error, inspect the actual dict structure, and fix their
code within one retry.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAL6SR2oAA719f3PbyNHm//Mp5rR1tdIuSVmy/GO52eSVZdmrvJblSNrX
l0qlNiAxJLEmAQYDiqJt5bPcZ7lPdv109wwGlOyk7nLnKtsSCQxmevrn0z2N
fr9vmqKZu6HdOZ66sinG9vjMXixdnTVFVdpqYk+q0jd1VpQut5enV9eT1dye
ljdFXZULusPvmGw0qt0NDXFWXVseZsfk1bjMFjRuXmeTpv9bQde6j/3msKmn
/aJq+hmu6z86MOOscdOq3gxtUU4qUyzroW3qlW8OHz364dGhyWqXDe314fXl
a0MTcdliaM8ur1+ZdVV/mNbVaknfzopy2m+qPv9gL513WT2e2df42nxwG7o2
H9q/0AR7tMCe5af3aG3H73r25+Pr04vjq5598+b8r8Zkq2ZW1UNjbZ/+WpqW
H9o/DuwfZQ38maztjxl91Pm8qqdZWXxk4g3taV2Mva9K/sotsmI+tL/hnv8o
PhSDSWFMWdULuvjG4XGXr06eHT451B+fPv3hUfj06dFBvODwuf74/PB5/PEI
nxoQsDve8yeHYZDnPxz9oD/+QKQNPx4dHsQfnzwL1z4+ihccPHuKH8/6LweF
ayb9cVW7/rKuRnO36OeuoVX5zgWzpllmy6KPv7S52bya4vurl6+GTIjAcFdE
Eea4l25SlAXz2yuev92li/csLca+pAFsVub2rGyIKce4yoMteaeJ+XjErJ66
ZmjxZD/c38/pJmLZ8QdX85QGtC37xJH7wow8y8znkz793acR3l9c969fdmf3
3o3ax9jd99X1nvxC0/XjuljyfA8GBw9PYb1eD9aP+cHXl/trYviGeTRvbz44
wLPPT951H3xe5W4OqWvcbWPf1VVTjau5vVq6cTEpxsxaDz/T0yWDBW4fy91L
vXlQVHjU1fnFm+PXp2+vr7pP9ItqzgJBfJ7ZEQncqCqdt/NiVGf1hvdBvn/4
udOima1Gg3G12J+tplNa5iQbu/12WLrr+Ozi5OJ4a6lZQbPLSH7fbUjkShbH
8NR/+qjxrN74cl/HMKbf79tsBFU1boyhrfKWtnwFHWWF6iNaU1ZaaIaiceNm
VTteG2k8madtZsR8JP9VWS2qlZ9vTF74cXXj6h6pAWLAZe1IbYAfC+VHu6Yp
CXeWrklZ5gwsk7ubYuy8WXmwTjNzHX16vFzOdUvbnd4FGfb4IbMNaeKFy4us
n9ck1aVZZg2e5Af2DMsiwaFFzao1bdwb0Ir+LacrWo4VPtolnbZHe+rpabxI
kzui3rLyuK+Yzvpzd0PXrbyreU0gA/1fWeKhMa3W6RLigiGABouuVo2t3d9X
RY2lEWVINZSTYkpkzcNNH8pqPXf51PXo0vkGF5I6bVyWW1KLRdkfYZm189Wq
pssDtTdQzZen9k1Rfgg6YUGqBoIt5A/Kw3xJebAcEJmuieSRD3hw/9DzRBPP
i48O06HFeLpeNiayP0jiVwsW3p5tKtorJgq43fdMNSIa3sg9YZv45vGcqJ33
51W1ZOZaZDLC2o36sjOLipZQgY4mGZEX6t14VRfNhh9e5GqY/UAYflHk+dwZ
8w04sK7yFe8PsX+d5UyUbG5hlcfzAgsoFkvS2mFlXrfPkW0auTyniZDGmNbZ
YoGZuFtivqbwjucRdEnfqyJq93ZgTzMytqVbh21viG/pZ9qi3Jsx2fJqwaSa
qlsxps3pEZFo+PFqntVzUTLjRDRKusTbT5/U5t3dmfXM0VTD3pEo02/zYkGi
nGObU3mnyQqHQ9zn2AkxiiTqRkV9Wa0dGHW0eVBwPEuO3xOVkG/I4JOgzmmi
gWfMA1qAKK0Cb0Xg3W3hG/xwdnr9KtLQ91rBMVVJg2ZEvQYOjaXJkcpdVjTy
AGrMWRhcSA0JK+2gKilWlUqdJ4d3d/G52ZxcpHxDTwYFTPDYWraSqS5ox4jO
fVyckSmP4mVviuye8Bl+EjwSehLWDeuI77E0/g7OyN3dwB6X8KL6icKx4wzy
UNNkGmxSK8f0bHKOSGlDkyjnjLNlNirmxLtBAIQpiLHtDclnbgIROwqpZxcr
YsF58YG4FYJlR3W1hk4rs5tiSi6mtz9fn7+hiUyjNmbtOqdV+IEajGxJo4OX
Myhm51lh/xyVsM3kk9OSjJyDrk8V+BVJlTO76k3u0W4X5bgggSNVAdYY8r1C
k9K53BOP02TpMpL8VppoWBNlTHdVtL0ynu8QyQYlyn/zbAn9TSZ35Ga0cqiu
MTFQTuudb2iZ33xjr2k1RVmRW7YRBiP/2MJB9uR8/HJ1vdOT/+3bC/758vRP
v5xdnr7Ez1c/H795E38wesXVzxe/vHnZ/tTeeXJxfn769qXcTJ/azkdm5/z4
zzuyzTsX767PLt4ev9mhFdmmI86QdKLhyLVGGNzlTbDrEET74uTd//qfB0fE
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
A01PiDr/G0dzEAAoegAA

-->

</rfc>

