<?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-00" 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="April" day="14"/>

    <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>

</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="setresource"><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. The
agent <bcp14>MUST</bcp14> call get_resource after set_resource to verify the
change took effect. If set_resource returns an error, 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="closed-loop-automation"><name>Closed-Loop Automation</name>

<t>The agent supports continuous monitoring through the Observe pattern.
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.</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.</t>

<t>The execution history mechanism provides a form of human-in-the-loop
approval: cached code is presented for user confirmation before
execution.</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) <bcp14>SHOULD</bcp14> require explicit user
confirmation before the agent can act.</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. The verify-after-set pattern
(calling get_resource after set_resource) mitigates this partially.
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, 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 601?>

<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:
H4sIAOlh3mkAA7187XIbR7Ll/36KWjo2TF4DoEhRH6bHM0tRlMS5pMgh6VVM
OByeBroBtNXoxnQ1SMKW5ln2We6T3XMyq6qrQcozsTG7ipBEAt31kZWfJzNr
OBwmbdGW+aHZOprlVVtMzNGpuVjmTdoWdWXqqTmuK9s2aVHlmbk6ub6Zrkpz
Ut0WTV0t8IbdStLxuMlvMcRpfWNkmK0kqydVusC4WZNO2+EvBZ7Nfx22+20z
GxZ1O0z53PDJk2SStvmsbtaHpqimdVIsm0PTNivb7j958u2T/SRt8vTQ3Ozf
XL1NsJA8XRya06ubN8ld3XycNfVqiW/nRTUbtvVQfjBXuc3TZjI3b/l18jFf
49ns0PyIBQ6wwYGR2QfY29HlwLw7ujm5OLoemLOz85+SJF2187o5TIwZ4q/B
suyh+fPI/Fn3IJ/p3v6c4qPe53UzS6viVyHeoTlpiom1dSVf5Yu0KA/NL3zn
fxUfi9G0SJKqbhZ4+DbndFdvjl/sP9t3Pz5//u0T/+nzg73wwP5L9+PL/Zfh
xwN+mpCA/fFePtv3g7z89uBb9+O3IK3/8WB/L/z47IV/9ulBeGDvxXP+eDp8
PSrydjqc1E0+XDb1uMwXwyxvsSvbe2Detst0WQz5F4eblvWM31+/fnMohPAM
dw2KCMe9zqdFVQi/vZH1m208vGOwGfMaA5i0ysxp1YIpJ3zKki3lpMF8MmLa
zPL20HBme7i7m+ElsOzkY97IkkY4ll1w5K4yo6wytdl0iL+7GOHDxc3w5nV/
dR/ycTeN2f5Q3+zoL1iunTTFUta7N9p7fAl3d3eju6cy8c3V7h0YvhUezbqX
9/Y49/nxZX/i8zrLS0pdm9+35rKp23pSl+Z6mU+KaTER1np8TotHRgu+PtG3
l+7lUVFzquvzi7Ojtyfvb677M9pFXYpAgM9TM4bAjesqt6Ysxk3arOUc9PvH
550V7Xw1Hk3qxe58NZthm9N0ku92w+Kto9OL44ujja2mBVaXQn4v1xC5SsTR
z/pPp5rMm7Wtdt0YSTIcDk06pqqatEmCo7IGR76ijjJK9TH2lFaGmqFo80m7
anLZGzSertO0czAf5L+u6kW9suU6yQo7qW/zZgA1AAZcNjnUBvmxcPxo7rAk
5c4qb2OWOSXLZPltMcltsrJknXae9/Tp0XJZuiPtTnqbZNiRSeZraOJFnhXp
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
OWuHo/imbO0Edf4bRq7JIDloAAA=

-->

</rfc>

