2669 lines
116 KiB
HTML
2669 lines
116 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en" class="Internet-Draft">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta content="Common,Latin" name="scripts">
|
||
<meta content="initial-scale=1.0" name="viewport">
|
||
<title>Multi-Agent Consensus and Capability Negotiation Protocols</title>
|
||
<meta content="Christian Nennemann" name="author">
|
||
<meta content="
|
||
This document defines standardized protocols for multiple AI agents to
|
||
reach consensus on shared decisions and negotiate capabilities dynamically
|
||
during runtime collaboration. As autonomous agent systems increasingly
|
||
operate in multi-agent configurations, the need for formal agreement
|
||
mechanisms and capability discovery becomes critical. This specification
|
||
addresses the lack of consensus protocols and capability negotiation
|
||
standards identified in the gap analysis for AI agent infrastructure.
|
||
" name="description">
|
||
<meta content="xml2rfc 3.31.0" name="generator">
|
||
<meta content="draft-nennemann-agent-consensus-00" name="ietf.draft">
|
||
<!-- Generator version information:
|
||
xml2rfc 3.31.0
|
||
Python 3.14.3
|
||
ConfigArgParse 1.7.1
|
||
google-i18n-address 3.1.1
|
||
intervaltree 3.2.1
|
||
Jinja2 3.1.6
|
||
lxml 6.0.2
|
||
platformdirs 4.9.2
|
||
pycountry 26.2.16
|
||
PyYAML 6.0.3
|
||
requests 2.32.5
|
||
wcwidth 0.6.0
|
||
-->
|
||
<link href="draft-nennemann-agent-consensus-00.xml" rel="alternate" type="application/rfc+xml">
|
||
<link href="#copyright" rel="license">
|
||
<style type="text/css">/*
|
||
|
||
NOTE: Changes at the bottom of this file overrides some earlier settings.
|
||
|
||
Once the style has stabilized and has been adopted as an official RFC style,
|
||
this can be consolidated so that style settings occur only in one place, but
|
||
for now the contents of this file consists first of the initial CSS work as
|
||
provided to the RFC Formatter (xml2rfc) work, followed by itemized and
|
||
commented changes found necessary during the development of the v3
|
||
formatters.
|
||
|
||
*/
|
||
|
||
/* fonts */
|
||
@import url('https://static.ietf.org/fonts/noto-sans/import.css'); /* Sans-serif */
|
||
@import url('https://static.ietf.org/fonts/noto-serif/import.css'); /* Serif (print) */
|
||
@import url('https://static.ietf.org/fonts/roboto-mono/import.css'); /* Monospace */
|
||
|
||
:root {
|
||
--font-sans: 'Noto Sans', Arial, Helvetica, sans-serif;
|
||
--font-serif: 'Noto Serif', 'Times', 'Times New Roman', serif;
|
||
--font-mono: 'Roboto Mono', Courier, 'Courier New', monospace;
|
||
}
|
||
|
||
@viewport {
|
||
zoom: 1.0;
|
||
}
|
||
@-ms-viewport {
|
||
width: extend-to-zoom;
|
||
zoom: 1.0;
|
||
}
|
||
/* general and mobile first */
|
||
html {
|
||
}
|
||
body {
|
||
max-width: 90%;
|
||
margin: 1.5em auto;
|
||
color: #222;
|
||
background-color: #fff;
|
||
font-size: 14px;
|
||
font-family: var(--font-sans);
|
||
line-height: 1.6;
|
||
scroll-behavior: smooth;
|
||
overflow-wrap: break-word;
|
||
}
|
||
.ears {
|
||
display: none;
|
||
}
|
||
|
||
/* headings */
|
||
#title, h1, h2, h3, h4, h5, h6 {
|
||
margin: 1em 0 0.5em;
|
||
font-weight: bold;
|
||
line-height: 1.3;
|
||
}
|
||
#title {
|
||
clear: both;
|
||
border-bottom: 1px solid #ddd;
|
||
margin: 0 0 0.5em 0;
|
||
padding: 1em 0 0.5em;
|
||
}
|
||
.author {
|
||
padding-bottom: 4px;
|
||
}
|
||
h1 {
|
||
font-size: 26px;
|
||
margin: 1em 0;
|
||
}
|
||
h2 {
|
||
font-size: 22px;
|
||
margin-top: -20px; /* provide offset for in-page anchors */
|
||
padding-top: 33px;
|
||
}
|
||
h3 {
|
||
font-size: 18px;
|
||
margin-top: -36px; /* provide offset for in-page anchors */
|
||
padding-top: 42px;
|
||
}
|
||
h4 {
|
||
font-size: 16px;
|
||
margin-top: -36px; /* provide offset for in-page anchors */
|
||
padding-top: 42px;
|
||
}
|
||
h5, h6 {
|
||
font-size: 14px;
|
||
}
|
||
#n-copyright-notice {
|
||
border-bottom: 1px solid #ddd;
|
||
padding-bottom: 1em;
|
||
margin-bottom: 1em;
|
||
}
|
||
/* general structure */
|
||
p {
|
||
padding: 0;
|
||
margin: 0 0 1em 0;
|
||
text-align: left;
|
||
}
|
||
div, span {
|
||
position: relative;
|
||
}
|
||
div {
|
||
margin: 0;
|
||
}
|
||
.alignRight.art-text {
|
||
background-color: #f9f9f9;
|
||
border: 1px solid #eee;
|
||
border-radius: 3px;
|
||
padding: 1em 1em 0;
|
||
margin-bottom: 1.5em;
|
||
}
|
||
.alignRight.art-text pre {
|
||
padding: 0;
|
||
}
|
||
.alignRight {
|
||
margin: 1em 0;
|
||
}
|
||
.alignRight > *:first-child {
|
||
border: none;
|
||
margin: 0;
|
||
float: right;
|
||
clear: both;
|
||
}
|
||
.alignRight > *:nth-child(2) {
|
||
clear: both;
|
||
display: block;
|
||
border: none;
|
||
}
|
||
svg {
|
||
display: block;
|
||
}
|
||
@media print {
|
||
svg {
|
||
max-height: 850px;
|
||
max-width: 660px;
|
||
}
|
||
}
|
||
svg[font-family~="serif" i], svg [font-family~="serif" i] {
|
||
font-family: var(--font-serif);
|
||
}
|
||
svg[font-family~="sans-serif" i], svg [font-family~="sans-serif" i] {
|
||
font-family: var(--font-sans);
|
||
}
|
||
svg[font-family~="monospace" i], svg [font-family~="monospace" i] {
|
||
font-family: var(--font-mono);
|
||
}
|
||
.alignCenter.art-text {
|
||
background-color: #f9f9f9;
|
||
border: 1px solid #eee;
|
||
border-radius: 3px;
|
||
padding: 1em 1em 0;
|
||
margin-bottom: 1.5em;
|
||
}
|
||
.alignCenter.art-text pre {
|
||
padding: 0;
|
||
}
|
||
.alignCenter {
|
||
margin: 1em 0;
|
||
}
|
||
.alignCenter > *:first-child {
|
||
display: table;
|
||
border: none;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
/* lists */
|
||
ol, ul {
|
||
padding: 0;
|
||
margin: 0 0 1em 2em;
|
||
}
|
||
ol ol, ul ul, ol ul, ul ol {
|
||
margin-left: 1em;
|
||
}
|
||
li {
|
||
margin: 0 0 0.25em 0;
|
||
}
|
||
.ulCompact li {
|
||
margin: 0;
|
||
}
|
||
ul.empty, .ulEmpty {
|
||
list-style-type: none;
|
||
}
|
||
ul.empty li, .ulEmpty li {
|
||
margin-top: 0.5em;
|
||
}
|
||
ul.ulBare, li.ulBare {
|
||
margin-left: 0em !important;
|
||
}
|
||
ul.compact, .ulCompact,
|
||
ol.compact, .olCompact {
|
||
line-height: 100%;
|
||
margin: 0 0 0 2em;
|
||
}
|
||
|
||
/* definition lists */
|
||
dl {
|
||
}
|
||
dl > dt {
|
||
float: left;
|
||
margin-right: 1em;
|
||
}
|
||
/*
|
||
dl.nohang > dt {
|
||
float: none;
|
||
}
|
||
*/
|
||
dl > dd {
|
||
margin-bottom: .8em;
|
||
min-height: 1.3em;
|
||
}
|
||
dl.compact > dd, .dlCompact > dd {
|
||
margin-bottom: 0em;
|
||
}
|
||
dl > dd > dl {
|
||
margin-top: 0.5em;
|
||
margin-bottom: 0em;
|
||
}
|
||
|
||
/* links */
|
||
a {
|
||
text-decoration: none;
|
||
}
|
||
a[href] {
|
||
color: #22e; /* Arlen: WCAG 2019 */
|
||
}
|
||
a[href]:hover {
|
||
background-color: #f2f2f2;
|
||
}
|
||
figcaption a[href],
|
||
a[href].selfRef {
|
||
color: #222;
|
||
}
|
||
/* XXX probably not this:
|
||
a.selfRef:hover {
|
||
background-color: transparent;
|
||
cursor: default;
|
||
} */
|
||
|
||
/* Figures */
|
||
tt, code, pre {
|
||
background-color: #f9f9f9;
|
||
font-family: var(--font-mono);
|
||
}
|
||
pre {
|
||
border: 1px solid #eee;
|
||
margin: 0;
|
||
padding: 1em;
|
||
}
|
||
img {
|
||
max-width: 100%;
|
||
}
|
||
figure {
|
||
margin: 0;
|
||
}
|
||
figure blockquote {
|
||
margin: 0.8em 0.4em 0.4em;
|
||
}
|
||
figcaption {
|
||
font-style: italic;
|
||
margin: 0 0 1em 0;
|
||
}
|
||
@media screen {
|
||
pre {
|
||
overflow-x: auto;
|
||
max-width: 100%;
|
||
max-width: calc(100% - 22px);
|
||
}
|
||
}
|
||
|
||
/* aside, blockquote */
|
||
aside, blockquote {
|
||
margin-left: 0;
|
||
padding: 1.2em 2em;
|
||
}
|
||
blockquote {
|
||
background-color: #f9f9f9;
|
||
color: #111; /* Arlen: WCAG 2019 */
|
||
border: 1px solid #ddd;
|
||
border-radius: 3px;
|
||
margin: 1em 0;
|
||
}
|
||
blockquote > *:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
cite {
|
||
display: block;
|
||
text-align: right;
|
||
font-style: italic;
|
||
}
|
||
.xref {
|
||
overflow-wrap: normal;
|
||
}
|
||
|
||
/* tables */
|
||
table {
|
||
width: 100%;
|
||
margin: 0 0 1em;
|
||
border-collapse: collapse;
|
||
border: 1px solid #eee;
|
||
}
|
||
th, td {
|
||
text-align: left;
|
||
vertical-align: top;
|
||
padding: 0.5em 0.75em;
|
||
}
|
||
th {
|
||
text-align: left;
|
||
background-color: #e9e9e9;
|
||
}
|
||
tr:nth-child(2n+1) > td {
|
||
background-color: #f5f5f5;
|
||
}
|
||
table caption {
|
||
font-style: italic;
|
||
margin: 0;
|
||
padding: 0;
|
||
text-align: left;
|
||
}
|
||
table p {
|
||
/* XXX to avoid bottom margin on table row signifiers. If paragraphs should
|
||
be allowed within tables more generally, it would be far better to select on a class. */
|
||
margin: 0;
|
||
}
|
||
|
||
/* pilcrow */
|
||
a.pilcrow {
|
||
color: #666; /* Arlen: AHDJ 2019 */
|
||
text-decoration: none;
|
||
visibility: hidden;
|
||
user-select: none;
|
||
-ms-user-select: none;
|
||
-o-user-select:none;
|
||
-moz-user-select: none;
|
||
-khtml-user-select: none;
|
||
-webkit-user-select: none;
|
||
-webkit-touch-callout: none;
|
||
}
|
||
@media screen {
|
||
aside:hover > a.pilcrow,
|
||
p:hover > a.pilcrow,
|
||
blockquote:hover > a.pilcrow,
|
||
div:hover > a.pilcrow,
|
||
li:hover > a.pilcrow,
|
||
pre:hover > a.pilcrow {
|
||
visibility: visible;
|
||
}
|
||
a.pilcrow:hover {
|
||
background-color: transparent;
|
||
}
|
||
}
|
||
|
||
/* misc */
|
||
hr {
|
||
border: 0;
|
||
border-top: 1px solid #eee;
|
||
}
|
||
.bcp14 {
|
||
font-variant: small-caps;
|
||
}
|
||
|
||
.role {
|
||
font-variant: all-small-caps;
|
||
}
|
||
|
||
/* info block */
|
||
#identifiers {
|
||
margin: 0;
|
||
font-size: 0.9em;
|
||
}
|
||
#identifiers dt {
|
||
width: 3em;
|
||
clear: left;
|
||
}
|
||
#identifiers dd {
|
||
float: left;
|
||
margin-bottom: 0;
|
||
}
|
||
/* Fix PDF info block run off issue */
|
||
@media print {
|
||
#identifiers dd {
|
||
max-width: 100%;
|
||
}
|
||
}
|
||
#identifiers .authors .author {
|
||
display: inline-block;
|
||
margin-right: 1.5em;
|
||
}
|
||
#identifiers .authors .org {
|
||
font-style: italic;
|
||
}
|
||
|
||
/* The prepared/rendered info at the very bottom of the page */
|
||
.docInfo {
|
||
color: #666; /* Arlen: WCAG 2019 */
|
||
font-size: 0.9em;
|
||
font-style: italic;
|
||
margin-top: 2em;
|
||
}
|
||
.docInfo .prepared {
|
||
float: left;
|
||
}
|
||
.docInfo .prepared {
|
||
float: right;
|
||
}
|
||
|
||
/* table of contents */
|
||
#toc {
|
||
padding: 0.75em 0 2em 0;
|
||
margin-bottom: 1em;
|
||
}
|
||
nav.toc ul {
|
||
margin: 0 0.5em 0 0;
|
||
padding: 0;
|
||
list-style: none;
|
||
}
|
||
nav.toc li {
|
||
line-height: 1.3em;
|
||
margin: 0.75em 0;
|
||
padding-left: 1.2em;
|
||
text-indent: -1.2em;
|
||
}
|
||
/* references */
|
||
.references dt {
|
||
text-align: right;
|
||
font-weight: bold;
|
||
min-width: 7em;
|
||
}
|
||
.references dd {
|
||
margin-left: 8em;
|
||
overflow: auto;
|
||
}
|
||
|
||
.refInstance {
|
||
margin-bottom: 1.25em;
|
||
}
|
||
|
||
.refSubseries {
|
||
margin-bottom: 1.25em;
|
||
}
|
||
|
||
.references .ascii {
|
||
margin-bottom: 0.25em;
|
||
}
|
||
|
||
/* index */
|
||
.index ul {
|
||
margin: 0 0 0 1em;
|
||
padding: 0;
|
||
list-style: none;
|
||
}
|
||
.index ul ul {
|
||
margin: 0;
|
||
}
|
||
.index li {
|
||
margin: 0;
|
||
text-indent: -2em;
|
||
padding-left: 2em;
|
||
padding-bottom: 5px;
|
||
}
|
||
.indexIndex {
|
||
margin: 0.5em 0 1em;
|
||
}
|
||
.index a {
|
||
font-weight: 700;
|
||
}
|
||
/* make the index two-column on all but the smallest screens */
|
||
@media (min-width: 600px) {
|
||
.index ul {
|
||
-moz-column-count: 2;
|
||
-moz-column-gap: 20px;
|
||
}
|
||
.index ul ul {
|
||
-moz-column-count: 1;
|
||
-moz-column-gap: 0;
|
||
}
|
||
}
|
||
|
||
/* authors */
|
||
address.vcard {
|
||
font-style: normal;
|
||
margin: 1em 0;
|
||
}
|
||
|
||
address.vcard .nameRole {
|
||
font-weight: 700;
|
||
margin-left: 0;
|
||
}
|
||
address.vcard .label {
|
||
font-family: var(--font-sans);
|
||
margin: 0.5em 0;
|
||
}
|
||
address.vcard .type {
|
||
display: none;
|
||
}
|
||
.alternative-contact {
|
||
margin: 1.5em 0 1em;
|
||
}
|
||
hr.addr {
|
||
border-top: 1px dashed;
|
||
margin: 0;
|
||
color: #ddd;
|
||
max-width: calc(100% - 16px);
|
||
}
|
||
|
||
/* temporary notes */
|
||
.rfcEditorRemove::before {
|
||
position: absolute;
|
||
top: 0.2em;
|
||
right: 0.2em;
|
||
padding: 0.2em;
|
||
content: "The RFC Editor will remove this note";
|
||
color: #9e2a00; /* Arlen: WCAG 2019 */
|
||
background-color: #ffd; /* Arlen: WCAG 2019 */
|
||
}
|
||
.rfcEditorRemove {
|
||
position: relative;
|
||
padding-top: 1.8em;
|
||
background-color: #ffd; /* Arlen: WCAG 2019 */
|
||
border-radius: 3px;
|
||
}
|
||
.cref {
|
||
background-color: #ffd; /* Arlen: WCAG 2019 */
|
||
padding: 2px 4px;
|
||
}
|
||
.crefSource {
|
||
font-style: italic;
|
||
}
|
||
/* alternative layout for smaller screens */
|
||
@media screen and (max-width: 1023px) {
|
||
body {
|
||
padding-top: 2em;
|
||
}
|
||
#title {
|
||
padding: 1em 0;
|
||
}
|
||
h1 {
|
||
font-size: 24px;
|
||
}
|
||
h2 {
|
||
font-size: 20px;
|
||
margin-top: -18px; /* provide offset for in-page anchors */
|
||
padding-top: 38px;
|
||
}
|
||
#identifiers dd {
|
||
max-width: 60%;
|
||
}
|
||
#toc {
|
||
position: fixed;
|
||
z-index: 2;
|
||
top: 0;
|
||
right: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
background-color: inherit;
|
||
border-bottom: 1px solid #ccc;
|
||
}
|
||
#toc h2 {
|
||
margin: -1px 0 0 0;
|
||
padding: 4px 0 4px 6px;
|
||
padding-right: 1em;
|
||
min-width: 190px;
|
||
font-size: 1.1em;
|
||
text-align: right;
|
||
background-color: #444;
|
||
color: white;
|
||
cursor: pointer;
|
||
}
|
||
#toc h2::before { /* css hamburger */
|
||
float: right;
|
||
position: relative;
|
||
width: 1em;
|
||
height: 1px;
|
||
left: -164px;
|
||
margin: 6px 0 0 0;
|
||
background: white none repeat scroll 0 0;
|
||
box-shadow: 0 4px 0 0 white, 0 8px 0 0 white;
|
||
content: "";
|
||
}
|
||
#toc nav {
|
||
display: none;
|
||
padding: 0.5em 1em 1em;
|
||
overflow: auto;
|
||
height: calc(100vh - 48px);
|
||
border-left: 1px solid #ddd;
|
||
}
|
||
}
|
||
|
||
/* alternative layout for wide screens */
|
||
@media screen and (min-width: 1024px) {
|
||
body {
|
||
max-width: 724px;
|
||
margin: 42px auto;
|
||
padding-left: 1.5em;
|
||
padding-right: 29em;
|
||
}
|
||
#toc {
|
||
position: fixed;
|
||
top: 42px;
|
||
right: 42px;
|
||
width: 25%;
|
||
margin: 0;
|
||
padding: 0 1em;
|
||
z-index: 1;
|
||
}
|
||
#toc h2 {
|
||
border-top: none;
|
||
border-bottom: 1px solid #ddd;
|
||
font-size: 1em;
|
||
font-weight: normal;
|
||
margin: 0;
|
||
padding: 0.25em 1em 1em 0;
|
||
}
|
||
#toc nav {
|
||
display: block;
|
||
height: calc(90vh - 84px);
|
||
bottom: 0;
|
||
padding: 0.5em 0 0;
|
||
overflow: auto;
|
||
}
|
||
img { /* future proofing */
|
||
max-width: 100%;
|
||
height: auto;
|
||
}
|
||
}
|
||
|
||
/* pagination */
|
||
@media print {
|
||
body {
|
||
width: 100%;
|
||
}
|
||
p {
|
||
orphans: 3;
|
||
widows: 3;
|
||
}
|
||
#n-copyright-notice {
|
||
border-bottom: none;
|
||
}
|
||
#toc, #n-introduction {
|
||
page-break-before: always;
|
||
}
|
||
#toc {
|
||
border-top: none;
|
||
padding-top: 0;
|
||
}
|
||
figure, pre {
|
||
page-break-inside: avoid;
|
||
}
|
||
figure {
|
||
overflow: scroll;
|
||
}
|
||
.breakable pre {
|
||
break-inside: auto;
|
||
}
|
||
h1, h2, h3, h4, h5, h6 {
|
||
page-break-after: avoid;
|
||
}
|
||
h2+*, h3+*, h4+*, h5+*, h6+* {
|
||
page-break-before: avoid;
|
||
}
|
||
pre {
|
||
white-space: pre-wrap;
|
||
word-wrap: break-word;
|
||
font-size: 10pt;
|
||
}
|
||
table {
|
||
border: 1px solid #ddd;
|
||
}
|
||
td {
|
||
border-top: 1px solid #ddd;
|
||
}
|
||
}
|
||
|
||
/* This is commented out here, as the string-set: doesn't
|
||
pass W3C validation currently */
|
||
/*
|
||
.ears thead .left {
|
||
string-set: ears-top-left content();
|
||
}
|
||
|
||
.ears thead .center {
|
||
string-set: ears-top-center content();
|
||
}
|
||
|
||
.ears thead .right {
|
||
string-set: ears-top-right content();
|
||
}
|
||
|
||
.ears tfoot .left {
|
||
string-set: ears-bottom-left content();
|
||
}
|
||
|
||
.ears tfoot .center {
|
||
string-set: ears-bottom-center content();
|
||
}
|
||
|
||
.ears tfoot .right {
|
||
string-set: ears-bottom-right content();
|
||
}
|
||
*/
|
||
|
||
@page :first {
|
||
padding-top: 0;
|
||
@top-left {
|
||
content: normal;
|
||
border: none;
|
||
}
|
||
@top-center {
|
||
content: normal;
|
||
border: none;
|
||
}
|
||
@top-right {
|
||
content: normal;
|
||
border: none;
|
||
}
|
||
}
|
||
|
||
@page {
|
||
size: A4;
|
||
margin-bottom: 45mm;
|
||
padding-top: 20px;
|
||
/* The following is commented out here, but set appropriately by in code, as
|
||
the content depends on the document */
|
||
/*
|
||
@top-left {
|
||
content: 'Internet-Draft';
|
||
vertical-align: bottom;
|
||
border-bottom: solid 1px #ccc;
|
||
}
|
||
@top-left {
|
||
content: string(ears-top-left);
|
||
vertical-align: bottom;
|
||
border-bottom: solid 1px #ccc;
|
||
}
|
||
@top-center {
|
||
content: string(ears-top-center);
|
||
vertical-align: bottom;
|
||
border-bottom: solid 1px #ccc;
|
||
}
|
||
@top-right {
|
||
content: string(ears-top-right);
|
||
vertical-align: bottom;
|
||
border-bottom: solid 1px #ccc;
|
||
}
|
||
@bottom-left {
|
||
content: string(ears-bottom-left);
|
||
vertical-align: top;
|
||
border-top: solid 1px #ccc;
|
||
}
|
||
@bottom-center {
|
||
content: string(ears-bottom-center);
|
||
vertical-align: top;
|
||
border-top: solid 1px #ccc;
|
||
}
|
||
@bottom-right {
|
||
content: '[Page ' counter(page) ']';
|
||
vertical-align: top;
|
||
border-top: solid 1px #ccc;
|
||
}
|
||
*/
|
||
|
||
}
|
||
|
||
/* Changes introduced to fix issues found during implementation */
|
||
/* Make sure links are clickable even if overlapped by following H* */
|
||
a {
|
||
z-index: 2;
|
||
}
|
||
/* Separate body from document info even without intervening H1 */
|
||
section {
|
||
clear: both;
|
||
}
|
||
|
||
|
||
/* Top align author divs, to avoid names without organization dropping level with org names */
|
||
.author {
|
||
vertical-align: top;
|
||
}
|
||
|
||
/* Leave room in document info to show Internet-Draft on one line */
|
||
#identifiers dt {
|
||
width: 8em;
|
||
}
|
||
|
||
/* Don't waste quite as much whitespace between label and value in doc info */
|
||
#identifiers dd {
|
||
margin-left: 1em;
|
||
}
|
||
|
||
/* Give floating toc a background color (needed when it's a div inside section */
|
||
#toc {
|
||
background-color: white;
|
||
}
|
||
|
||
/* Make the collapsed ToC header render white on gray also when it's a link */
|
||
@media screen and (max-width: 1023px) {
|
||
#toc h2 a,
|
||
#toc h2 a:link,
|
||
#toc h2 a:focus,
|
||
#toc h2 a:hover,
|
||
#toc a.toplink,
|
||
#toc a.toplink:hover {
|
||
color: white;
|
||
background-color: #444;
|
||
text-decoration: none;
|
||
}
|
||
}
|
||
|
||
/* Give the bottom of the ToC some whitespace */
|
||
@media screen and (min-width: 1024px) {
|
||
#toc {
|
||
padding: 0 0 1em 1em;
|
||
}
|
||
}
|
||
|
||
/* Style section numbers with more space between number and title */
|
||
.section-number {
|
||
padding-right: 0.5em;
|
||
}
|
||
|
||
/* prevent monospace from becoming overly large */
|
||
tt, code, pre {
|
||
font-size: 95%;
|
||
}
|
||
|
||
/* Fix the height/width aspect for ascii art*/
|
||
.sourcecode pre,
|
||
.art-text pre {
|
||
line-height: 1.12;
|
||
}
|
||
|
||
|
||
/* Add styling for a link in the ToC that points to the top of the document */
|
||
a.toplink {
|
||
float: right;
|
||
margin-right: 0.5em;
|
||
}
|
||
|
||
/* Fix the dl styling to match the RFC 7992 attributes */
|
||
dl > dt,
|
||
dl.dlParallel > dt {
|
||
float: left;
|
||
margin-right: 1em;
|
||
}
|
||
dl.dlNewline > dt {
|
||
float: none;
|
||
}
|
||
|
||
/* Provide styling for table cell text alignment */
|
||
table td.text-left,
|
||
table th.text-left {
|
||
text-align: left;
|
||
}
|
||
table td.text-center,
|
||
table th.text-center {
|
||
text-align: center;
|
||
}
|
||
table td.text-right,
|
||
table th.text-right {
|
||
text-align: right;
|
||
}
|
||
|
||
/* Make the alternative author contact information look less like just another
|
||
author, and group it closer with the primary author contact information */
|
||
.alternative-contact {
|
||
margin: 0.5em 0 0.25em 0;
|
||
}
|
||
address .non-ascii {
|
||
margin: 0 0 0 2em;
|
||
}
|
||
|
||
/* With it being possible to set tables with alignment
|
||
left, center, and right, { width: 100%; } does not make sense */
|
||
table {
|
||
width: auto;
|
||
}
|
||
|
||
/* Avoid reference text that sits in a block with very wide left margin,
|
||
because of a long floating dt label.*/
|
||
.references dd {
|
||
overflow: visible;
|
||
}
|
||
|
||
/* Control caption placement */
|
||
caption {
|
||
caption-side: bottom;
|
||
}
|
||
|
||
/* Limit the width of the author address vcard, so names in right-to-left
|
||
script don't end up on the other side of the page. */
|
||
|
||
address.vcard {
|
||
max-width: 30em;
|
||
margin-right: auto;
|
||
}
|
||
|
||
/* For address alignment dependent on LTR or RTL scripts */
|
||
address div.left {
|
||
text-align: left;
|
||
}
|
||
address div.right {
|
||
text-align: right;
|
||
}
|
||
|
||
/* Provide table alignment support. We can't use the alignX classes above
|
||
since they do unwanted things with caption and other styling. */
|
||
table.right {
|
||
margin-left: auto;
|
||
margin-right: 0;
|
||
}
|
||
table.center {
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
}
|
||
table.left {
|
||
margin-left: 0;
|
||
margin-right: auto;
|
||
}
|
||
|
||
/* Give the table caption label the same styling as the figcaption */
|
||
caption a[href] {
|
||
color: #222;
|
||
}
|
||
|
||
@media print {
|
||
.toplink {
|
||
display: none;
|
||
}
|
||
|
||
/* avoid overwriting the top border line with the ToC header */
|
||
#toc {
|
||
padding-top: 1px;
|
||
}
|
||
|
||
/* Avoid page breaks inside dl and author address entries */
|
||
.vcard {
|
||
page-break-inside: avoid;
|
||
}
|
||
|
||
}
|
||
/* Tweak the bcp14 keyword presentation */
|
||
.bcp14 {
|
||
font-variant: small-caps;
|
||
font-weight: bold;
|
||
font-size: 0.9em;
|
||
}
|
||
/* Tweak the invisible space above H* in order not to overlay links in text above */
|
||
h2 {
|
||
margin-top: -18px; /* provide offset for in-page anchors */
|
||
padding-top: 31px;
|
||
}
|
||
h3 {
|
||
margin-top: -18px; /* provide offset for in-page anchors */
|
||
padding-top: 24px;
|
||
}
|
||
h4 {
|
||
margin-top: -18px; /* provide offset for in-page anchors */
|
||
padding-top: 24px;
|
||
}
|
||
/* Float artwork pilcrow to the right */
|
||
@media screen {
|
||
.artwork a.pilcrow {
|
||
display: block;
|
||
line-height: 0.7;
|
||
margin-top: 0.15em;
|
||
}
|
||
}
|
||
/* Make pilcrows on dd visible */
|
||
@media screen {
|
||
dd:hover > a.pilcrow {
|
||
visibility: visible;
|
||
}
|
||
}
|
||
/* Make the placement of figcaption match that of a table's caption
|
||
by removing the figure's added bottom margin */
|
||
.alignLeft.art-text,
|
||
.alignCenter.art-text,
|
||
.alignRight.art-text {
|
||
margin-bottom: 0;
|
||
}
|
||
.alignLeft,
|
||
.alignCenter,
|
||
.alignRight {
|
||
margin: 1em 0 0 0;
|
||
}
|
||
/* In print, the pilcrow won't show on hover, so prevent it from taking up space,
|
||
possibly even requiring a new line */
|
||
@media print {
|
||
a.pilcrow {
|
||
display: none;
|
||
}
|
||
}
|
||
/* Styling for the external metadata */
|
||
div#external-metadata {
|
||
background-color: #eee;
|
||
padding: 0.5em;
|
||
margin-bottom: 0.5em;
|
||
display: none;
|
||
}
|
||
div#internal-metadata {
|
||
padding: 0.5em; /* to match the external-metadata padding */
|
||
}
|
||
/* Styling for title RFC Number */
|
||
h1#rfcnum {
|
||
clear: both;
|
||
margin: 0 0 -1em;
|
||
padding: 1em 0 0 0;
|
||
}
|
||
/* Make .olPercent look the same as <ol><li> */
|
||
dl.olPercent > dd {
|
||
margin-bottom: 0.25em;
|
||
min-height: initial;
|
||
}
|
||
/* Give aside some styling to set it apart */
|
||
aside {
|
||
border-left: 1px solid #ddd;
|
||
margin: 1em 0 1em 2em;
|
||
padding: 0.2em 2em;
|
||
}
|
||
aside > dl,
|
||
aside > ol,
|
||
aside > ul,
|
||
aside > table,
|
||
aside > p {
|
||
margin-bottom: 0.5em;
|
||
}
|
||
/* Additional page break settings */
|
||
@media print {
|
||
figcaption, table caption {
|
||
page-break-before: avoid;
|
||
}
|
||
}
|
||
/* Font size adjustments for print */
|
||
@media print {
|
||
body { font-size: 10pt; line-height: normal; max-width: 96%; }
|
||
h1 { font-size: 1.72em; padding-top: 1.5em; } /* 1*1.2*1.2*1.2 */
|
||
h2 { font-size: 1.44em; padding-top: 1.5em; } /* 1*1.2*1.2 */
|
||
h3 { font-size: 1.2em; padding-top: 1.5em; } /* 1*1.2 */
|
||
h4 { font-size: 1em; padding-top: 1.5em; }
|
||
h5, h6 { font-size: 1em; margin: initial; padding: 0.5em 0 0.3em; }
|
||
}
|
||
/* Sourcecode margin in print, when there's no pilcrow */
|
||
@media print {
|
||
.artwork,
|
||
.artwork > pre,
|
||
.sourcecode {
|
||
margin-bottom: 1em;
|
||
}
|
||
}
|
||
/* Avoid narrow tables forcing too narrow table captions, which may render badly */
|
||
table {
|
||
min-width: 20em;
|
||
}
|
||
/* ol type a */
|
||
ol.type-a { list-style-type: lower-alpha; }
|
||
ol.type-A { list-style-type: upper-alpha; }
|
||
ol.type-i { list-style-type: lower-roman; }
|
||
ol.type-I { list-style-type: upper-roman; }
|
||
/* Apply the print table and row borders in general, on request from the RPC,
|
||
and increase the contrast between border and odd row background slightly */
|
||
table {
|
||
border: 1px solid #ddd;
|
||
}
|
||
td {
|
||
border-top: 1px solid #ddd;
|
||
}
|
||
tr {
|
||
break-inside: avoid;
|
||
}
|
||
tr:nth-child(2n+1) > td {
|
||
background-color: #f8f8f8;
|
||
}
|
||
/* Use style rules to govern display of the TOC. */
|
||
@media screen and (max-width: 1023px) {
|
||
#toc nav { display: none; }
|
||
#toc.active nav { display: block; }
|
||
}
|
||
/* Add support for keepWithNext */
|
||
.keepWithNext {
|
||
break-after: avoid-page;
|
||
break-after: avoid-page;
|
||
}
|
||
/* Add support for keepWithPrevious */
|
||
.keepWithPrevious {
|
||
break-before: avoid-page;
|
||
}
|
||
/* Change the approach to avoiding breaks inside artwork etc. */
|
||
figure, pre, table, .artwork, .sourcecode {
|
||
break-before: auto;
|
||
break-after: auto;
|
||
}
|
||
/* Avoid breaks between <dt> and <dd> */
|
||
dl {
|
||
break-before: auto;
|
||
break-inside: auto;
|
||
}
|
||
dt {
|
||
break-before: auto;
|
||
break-after: avoid-page;
|
||
}
|
||
dd {
|
||
break-before: avoid-page;
|
||
break-after: auto;
|
||
orphans: 3;
|
||
widows: 3
|
||
}
|
||
span.break, dd.break {
|
||
margin-bottom: 0;
|
||
min-height: 0;
|
||
break-before: auto;
|
||
break-inside: auto;
|
||
break-after: auto;
|
||
}
|
||
/* Undo break-before ToC */
|
||
@media print {
|
||
#toc {
|
||
break-before: auto;
|
||
}
|
||
}
|
||
/* Text in compact lists should not get extra bottom margin space,
|
||
since that would makes the list not compact */
|
||
ul.compact p, .ulCompact p,
|
||
ol.compact p, .olCompact p {
|
||
margin: 0;
|
||
}
|
||
/* But the list as a whole needs the extra space at the end */
|
||
section ul.compact,
|
||
section .ulCompact,
|
||
section ol.compact,
|
||
section .olCompact {
|
||
margin-bottom: 1em; /* same as p not within ul.compact etc. */
|
||
}
|
||
/* The tt and code background above interferes with for instance table cell
|
||
backgrounds. Changed to something a bit more selective. */
|
||
tt, code {
|
||
background-color: transparent;
|
||
}
|
||
p tt, p code, li tt, li code, dt tt, dt code {
|
||
background-color: #f8f8f8;
|
||
}
|
||
/* Tweak the pre margin -- 0px doesn't come out well */
|
||
pre {
|
||
margin-top: 0.5px;
|
||
}
|
||
/* Tweak the compact list text */
|
||
ul.compact, .ulCompact,
|
||
ol.compact, .olCompact,
|
||
dl.compact, .dlCompact {
|
||
line-height: normal;
|
||
}
|
||
/* Don't add top margin for nested lists */
|
||
li > ul, li > ol, li > dl,
|
||
dd > ul, dd > ol, dd > dl,
|
||
dl > dd > dl {
|
||
margin-top: initial;
|
||
}
|
||
/* Elements that should not be rendered on the same line as a <dt> */
|
||
/* This should match the element list in writer.text.TextWriter.render_dl() */
|
||
dd > div.artwork:first-child,
|
||
dd > aside:first-child,
|
||
dd > blockquote:first-child,
|
||
dd > figure:first-child,
|
||
dd > ol:first-child,
|
||
dd > div.sourcecode:first-child,
|
||
dd > table:first-child,
|
||
dd > ul:first-child {
|
||
clear: left;
|
||
}
|
||
/* fix for weird browser behaviour when <dd/> is empty */
|
||
dt+dd:empty::before{
|
||
content: "\00a0";
|
||
}
|
||
/* Make paragraph spacing inside <li> smaller than in body text, to fit better within the list */
|
||
li > p {
|
||
margin-bottom: 0.5em
|
||
}
|
||
/* Don't let p margin spill out from inside list items */
|
||
li > p:last-of-type:only-child {
|
||
margin-bottom: 0;
|
||
}
|
||
</style>
|
||
<link href="rfc-local.css" rel="stylesheet" type="text/css">
|
||
<script type="application/javascript">async function addMetadata(){try{const e=document.styleSheets[0].cssRules;for(let t=0;t<e.length;t++)if(/#identifiers/.exec(e[t].selectorText)){const a=e[t].cssText.replace("#identifiers","#external-updates");document.styleSheets[0].insertRule(a,document.styleSheets[0].cssRules.length)}}catch(e){console.log(e)}const e=document.getElementById("external-metadata");if(e)try{var t,a="",o=function(e){const t=document.getElementsByTagName("meta");for(let a=0;a<t.length;a++)if(t[a].getAttribute("name")===e)return t[a].getAttribute("content");return""}("rfc.number");if(o){t="https://www.rfc-editor.org/rfc/rfc"+o+".json";try{const e=await fetch(t);a=await e.json()}catch(e){t=document.URL.indexOf("html")>=0?document.URL.replace(/html$/,"json"):document.URL+".json";const o=await fetch(t);a=await o.json()}}if(!a)return;e.style.display="block";const s="",d="https://datatracker.ietf.org/doc",n="https://datatracker.ietf.org/ipr/search",c="https://www.rfc-editor.org/info",l=a.doc_id.toLowerCase(),i=a.doc_id.slice(0,3).toLowerCase(),f=a.doc_id.slice(3).replace(/^0+/,""),u={status:"Status",obsoletes:"Obsoletes",obsoleted_by:"Obsoleted By",updates:"Updates",updated_by:"Updated By",see_also:"See Also",errata_url:"Errata"};let h="<dl style='overflow:hidden' id='external-updates'>";["status","obsoletes","obsoleted_by","updates","updated_by","see_also","errata_url"].forEach(e=>{if("status"==e){a[e]=a[e].toLowerCase();var t=a[e].split(" "),o=t.length,w="",p=1;for(let e=0;e<o;e++)p<o?w=w+r(t[e])+" ":w+=r(t[e]),p++;a[e]=w}else if("obsoletes"==e||"obsoleted_by"==e||"updates"==e||"updated_by"==e){var g,m="",b=1;g=a[e].length;for(let t=0;t<g;t++)a[e][t]&&(a[e][t]=String(a[e][t]).toLowerCase(),m=b<g?m+"<a href='"+s+"/rfc/".concat(a[e][t])+"'>"+a[e][t].slice(3)+"</a>, ":m+"<a href='"+s+"/rfc/".concat(a[e][t])+"'>"+a[e][t].slice(3)+"</a>",b++);a[e]=m}else if("see_also"==e){var y,L="",C=1;y=a[e].length;for(let t=0;t<y;t++)if(a[e][t]){a[e][t]=String(a[e][t]);var _=a[e][t].slice(0,3),v=a[e][t].slice(3).replace(/^0+/,"");L=C<y?"RFC"!=_?L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+_+" "+v+"</a>, ":L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+v+"</a>, ":"RFC"!=_?L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+_+" "+v+"</a>":L+"<a href='"+s+"/info/"+_.toLowerCase().concat(v.toLowerCase())+"'>"+v+"</a>",C++}a[e]=L}else if("errata_url"==e){var R="";R=a[e]?R+"<a href='"+a[e]+"'>Errata exist</a> | <a href='"+d+"/"+l+"'>Datatracker</a>| <a href='"+n+"/?"+i+"="+f+"&submit="+i+"'>IPR</a> | <a href='"+c+"/"+l+"'>Info page</a>":"<a href='"+d+"/"+l+"'>Datatracker</a> | <a href='"+n+"/?"+i+"="+f+"&submit="+i+"'>IPR</a> | <a href='"+c+"/"+l+"'>Info page</a>",a[e]=R}""!=a[e]?"Errata"==u[e]?h+=`<dt>More info:</dt><dd>${a[e]}</dd>`:h+=`<dt>${u[e]}:</dt><dd>${a[e]}</dd>`:"Errata"==u[e]&&(h+=`<dt>More info:</dt><dd>${a[e]}</dd>`)}),h+="</dl>",e.innerHTML=h}catch(e){console.log(e)}else console.log("Could not locate metadata <div> element");function r(e){return e.charAt(0).toUpperCase()+e.slice(1)}}window.removeEventListener("load",addMetadata),window.addEventListener("load",addMetadata);</script>
|
||
</head>
|
||
<body class="xml2rfc">
|
||
<table class="ears">
|
||
<thead><tr>
|
||
<td class="left">Internet-Draft</td>
|
||
<td class="center">Agent Consensus</td>
|
||
<td class="right">March 2026</td>
|
||
</tr></thead>
|
||
<tfoot><tr>
|
||
<td class="left">Nennemann</td>
|
||
<td class="center">Expires 7 September 2026</td>
|
||
<td class="right">[Page]</td>
|
||
</tr></tfoot>
|
||
</table>
|
||
<div id="external-metadata" class="document-information"></div>
|
||
<div id="internal-metadata" class="document-information">
|
||
<dl id="identifiers">
|
||
<dt class="label-workgroup">Workgroup:</dt>
|
||
<dd class="workgroup">NMOP</dd>
|
||
<dt class="label-internet-draft">Internet-Draft:</dt>
|
||
<dd class="internet-draft">draft-nennemann-agent-consensus-00</dd>
|
||
<dt class="label-published">Published:</dt>
|
||
<dd class="published">
|
||
<time datetime="2026-03-06" class="published">6 March 2026</time>
|
||
</dd>
|
||
<dt class="label-intended-status">Intended Status:</dt>
|
||
<dd class="intended-status">Standards Track</dd>
|
||
<dt class="label-expires">Expires:</dt>
|
||
<dd class="expires"><time datetime="2026-09-07">7 September 2026</time></dd>
|
||
<dt class="label-authors">Author:</dt>
|
||
<dd class="authors">
|
||
<div class="author">
|
||
<div class="author-name">C. Nennemann</div>
|
||
<div class="org">Independent Researcher</div>
|
||
</div>
|
||
</dd>
|
||
</dl>
|
||
</div>
|
||
<h1 id="title">Multi-Agent Consensus and Capability Negotiation Protocols</h1>
|
||
<section id="section-abstract">
|
||
<h2 id="abstract"><a href="#abstract" class="selfRef">Abstract</a></h2>
|
||
<p id="section-abstract-1">This document defines standardized protocols for multiple AI agents to
|
||
reach consensus on shared decisions and negotiate capabilities dynamically
|
||
during runtime collaboration. As autonomous agent systems increasingly
|
||
operate in multi-agent configurations, the need for formal agreement
|
||
mechanisms and capability discovery becomes critical. This specification
|
||
addresses the lack of consensus protocols and capability negotiation
|
||
standards identified in the gap analysis for AI agent infrastructure.<a href="#section-abstract-1" class="pilcrow">¶</a></p>
|
||
</section>
|
||
<div id="status-of-memo">
|
||
<section id="section-boilerplate.1">
|
||
<h2 id="name-status-of-this-memo">
|
||
<a href="#name-status-of-this-memo" class="section-name selfRef">Status of This Memo</a>
|
||
</h2>
|
||
<p id="section-boilerplate.1-1">
|
||
This Internet-Draft is submitted in full conformance with the
|
||
provisions of BCP 78 and BCP 79.<a href="#section-boilerplate.1-1" class="pilcrow">¶</a></p>
|
||
<p id="section-boilerplate.1-2">
|
||
Internet-Drafts are working documents of the Internet Engineering Task
|
||
Force (IETF). Note that other groups may also distribute working
|
||
documents as Internet-Drafts. The list of current Internet-Drafts is
|
||
at <span><a href="https://datatracker.ietf.org/drafts/current/">https://datatracker.ietf.org/drafts/current/</a></span>.<a href="#section-boilerplate.1-2" class="pilcrow">¶</a></p>
|
||
<p id="section-boilerplate.1-3">
|
||
Internet-Drafts are draft documents valid for a maximum of six months
|
||
and may be updated, replaced, or obsoleted by other documents at any
|
||
time. It is inappropriate to use Internet-Drafts as reference
|
||
material or to cite them other than as "work in progress."<a href="#section-boilerplate.1-3" class="pilcrow">¶</a></p>
|
||
<p id="section-boilerplate.1-4">
|
||
This Internet-Draft will expire on 7 September 2026.<a href="#section-boilerplate.1-4" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
<div id="copyright">
|
||
<section id="section-boilerplate.2">
|
||
<h2 id="name-copyright-notice">
|
||
<a href="#name-copyright-notice" class="section-name selfRef">Copyright Notice</a>
|
||
</h2>
|
||
<p id="section-boilerplate.2-1">
|
||
Copyright (c) 2026 IETF Trust and the persons identified as the
|
||
document authors. All rights reserved.<a href="#section-boilerplate.2-1" class="pilcrow">¶</a></p>
|
||
<p id="section-boilerplate.2-2">
|
||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||
Provisions Relating to IETF Documents
|
||
(<span><a href="https://trustee.ietf.org/license-info">https://trustee.ietf.org/license-info</a></span>) in effect on the date of
|
||
publication of this document. Please review these documents
|
||
carefully, as they describe your rights and restrictions with
|
||
respect to this document. Code Components extracted from this
|
||
document must include Revised BSD License text as described in
|
||
Section 4.e of the Trust Legal Provisions and are provided without
|
||
warranty as described in the Revised BSD License.<a href="#section-boilerplate.2-2" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
<div id="toc">
|
||
<section id="section-toc.1">
|
||
<a href="#" onclick="scroll(0,0)" class="toplink">▲</a><h2 id="name-table-of-contents">
|
||
<a href="#name-table-of-contents" class="section-name selfRef">Table of Contents</a>
|
||
</h2>
|
||
<nav class="toc"><ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.1">
|
||
<p id="section-toc.1-1.1.1" class="keepWithNext"><a href="#section-1" class="auto internal xref">1</a>. <a href="#name-introduction" class="internal xref">Introduction</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.2">
|
||
<p id="section-toc.1-1.2.1" class="keepWithNext"><a href="#section-2" class="auto internal xref">2</a>. <a href="#name-terminology" class="internal xref">Terminology</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3">
|
||
<p id="section-toc.1-1.3.1"><a href="#section-3" class="auto internal xref">3</a>. <a href="#name-consensus-protocols" class="internal xref">Consensus Protocols</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.1">
|
||
<p id="section-toc.1-1.3.2.1.1" class="keepWithNext"><a href="#section-3.1" class="auto internal xref">3.1</a>. <a href="#name-consensus-model-overview" class="internal xref">Consensus Model Overview</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2">
|
||
<p id="section-toc.1-1.3.2.2.1"><a href="#section-3.2" class="auto internal xref">3.2</a>. <a href="#name-consensus-mechanisms" class="internal xref">Consensus Mechanisms</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.1">
|
||
<p id="section-toc.1-1.3.2.2.2.1.1"><a href="#section-3.2.1" class="auto internal xref">3.2.1</a>. <a href="#name-simple-majority-voting" class="internal xref">Simple Majority Voting</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.2">
|
||
<p id="section-toc.1-1.3.2.2.2.2.1"><a href="#section-3.2.2" class="auto internal xref">3.2.2</a>. <a href="#name-weighted-consensus" class="internal xref">Weighted Consensus</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.3">
|
||
<p id="section-toc.1-1.3.2.2.2.3.1"><a href="#section-3.2.3" class="auto internal xref">3.2.3</a>. <a href="#name-leader-based-consensus" class="internal xref">Leader-Based Consensus</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.2.2.4">
|
||
<p id="section-toc.1-1.3.2.2.2.4.1"><a href="#section-3.2.4" class="auto internal xref">3.2.4</a>. <a href="#name-optimistic-consensus" class="internal xref">Optimistic Consensus</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3">
|
||
<p id="section-toc.1-1.3.2.3.1"><a href="#section-3.3" class="auto internal xref">3.3</a>. <a href="#name-consensus-message-format" class="internal xref">Consensus Message Format</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.1">
|
||
<p id="section-toc.1-1.3.2.3.2.1.1"><a href="#section-3.3.1" class="auto internal xref">3.3.1</a>. <a href="#name-proposal-message-structure" class="internal xref">Proposal Message Structure</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.2">
|
||
<p id="section-toc.1-1.3.2.3.2.2.1"><a href="#section-3.3.2" class="auto internal xref">3.3.2</a>. <a href="#name-vote-message-structure" class="internal xref">Vote Message Structure</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.3.2.3">
|
||
<p id="section-toc.1-1.3.2.3.2.3.1"><a href="#section-3.3.3" class="auto internal xref">3.3.3</a>. <a href="#name-commit-and-abort-signals" class="internal xref">Commit and Abort Signals</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.4">
|
||
<p id="section-toc.1-1.3.2.4.1"><a href="#section-3.4" class="auto internal xref">3.4</a>. <a href="#name-quorum-and-timeout-rules" class="internal xref">Quorum and Timeout Rules</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.4.2.1">
|
||
<p id="section-toc.1-1.3.2.4.2.1.1"><a href="#section-3.4.1" class="auto internal xref">3.4.1</a>. <a href="#name-quorum-calculation" class="internal xref">Quorum Calculation</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.4.2.2">
|
||
<p id="section-toc.1-1.3.2.4.2.2.1"><a href="#section-3.4.2" class="auto internal xref">3.4.2</a>. <a href="#name-timeout-semantics-and-fallb" class="internal xref">Timeout Semantics and Fallback Behavior</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.4.2.3">
|
||
<p id="section-toc.1-1.3.2.4.2.3.1"><a href="#section-3.4.3" class="auto internal xref">3.4.3</a>. <a href="#name-split-brain-prevention" class="internal xref">Split-Brain Prevention</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.5">
|
||
<p id="section-toc.1-1.3.2.5.1"><a href="#section-3.5" class="auto internal xref">3.5</a>. <a href="#name-conflict-resolution" class="internal xref">Conflict Resolution</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.5.2.1">
|
||
<p id="section-toc.1-1.3.2.5.2.1.1"><a href="#section-3.5.1" class="auto internal xref">3.5.1</a>. <a href="#name-priority-based-resolution" class="internal xref">Priority-Based Resolution</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.5.2.2">
|
||
<p id="section-toc.1-1.3.2.5.2.2.1"><a href="#section-3.5.2" class="auto internal xref">3.5.2</a>. <a href="#name-escalation-to-human-operato" class="internal xref">Escalation to Human Operator</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.3.2.5.2.3">
|
||
<p id="section-toc.1-1.3.2.5.2.3.1"><a href="#section-3.5.3" class="auto internal xref">3.5.3</a>. <a href="#name-deadlock-detection-and-brea" class="internal xref">Deadlock Detection and Breaking</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4">
|
||
<p id="section-toc.1-1.4.1"><a href="#section-4" class="auto internal xref">4</a>. <a href="#name-capability-negotiation" class="internal xref">Capability Negotiation</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.1">
|
||
<p id="section-toc.1-1.4.2.1.1"><a href="#section-4.1" class="auto internal xref">4.1</a>. <a href="#name-capability-advertisement-fo" class="internal xref">Capability Advertisement Format</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.1.2.1">
|
||
<p id="section-toc.1-1.4.2.1.2.1.1"><a href="#section-4.1.1" class="auto internal xref">4.1.1</a>. <a href="#name-extending-agent-discovery-w" class="internal xref">Extending Agent Discovery with Capability Descriptors</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.1.2.2">
|
||
<p id="section-toc.1-1.4.2.1.2.2.1"><a href="#section-4.1.2" class="auto internal xref">4.1.2</a>. <a href="#name-capability-categories" class="internal xref">Capability Categories</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.1.2.3">
|
||
<p id="section-toc.1-1.4.2.1.2.3.1"><a href="#section-4.1.3" class="auto internal xref">4.1.3</a>. <a href="#name-version-and-compatibility-m" class="internal xref">Version and Compatibility Metadata</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2">
|
||
<p id="section-toc.1-1.4.2.2.1"><a href="#section-4.2" class="auto internal xref">4.2</a>. <a href="#name-dynamic-negotiation-protoco" class="internal xref">Dynamic Negotiation Protocol</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2.2.1">
|
||
<p id="section-toc.1-1.4.2.2.2.1.1"><a href="#section-4.2.1" class="auto internal xref">4.2.1</a>. <a href="#name-negotiation-initiation-and-" class="internal xref">Negotiation Initiation and Session Management</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2.2.2">
|
||
<p id="section-toc.1-1.4.2.2.2.2.1"><a href="#section-4.2.2" class="auto internal xref">4.2.2</a>. <a href="#name-offer-counter-offer-exchang" class="internal xref">Offer/Counter-Offer Exchange</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2.2.3">
|
||
<p id="section-toc.1-1.4.2.2.2.3.1"><a href="#section-4.2.3" class="auto internal xref">4.2.3</a>. <a href="#name-acceptance-and-binding" class="internal xref">Acceptance and Binding</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.2.2.4">
|
||
<p id="section-toc.1-1.4.2.2.2.4.1"><a href="#section-4.2.4" class="auto internal xref">4.2.4</a>. <a href="#name-re-negotiation-during-runti" class="internal xref">Re-Negotiation During Runtime</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3">
|
||
<p id="section-toc.1-1.4.2.3.1"><a href="#section-4.3" class="auto internal xref">4.3</a>. <a href="#name-capability-registry" class="internal xref">Capability Registry</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.1">
|
||
<p id="section-toc.1-1.4.2.3.2.1.1"><a href="#section-4.3.1" class="auto internal xref">4.3.1</a>. <a href="#name-well-known-capability-types" class="internal xref">Well-Known Capability Types</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.4.2.3.2.2">
|
||
<p id="section-toc.1-1.4.2.3.2.2.1"><a href="#section-4.3.2" class="auto internal xref">4.3.2</a>. <a href="#name-extension-mechanism-for-cus" class="internal xref">Extension Mechanism for Custom Capabilities</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.5">
|
||
<p id="section-toc.1-1.5.1"><a href="#section-5" class="auto internal xref">5</a>. <a href="#name-ect-integration" class="internal xref">ECT Integration</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.5.2.1">
|
||
<p id="section-toc.1-1.5.2.1.1"><a href="#section-5.1" class="auto internal xref">5.1</a>. <a href="#name-consensus-evidence-in-ect-n" class="internal xref">Consensus Evidence in ECT Nodes</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.5.2.2">
|
||
<p id="section-toc.1-1.5.2.2.1"><a href="#section-5.2" class="auto internal xref">5.2</a>. <a href="#name-capability-negotiation-reco" class="internal xref">Capability Negotiation Records in ECT</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6">
|
||
<p id="section-toc.1-1.6.1"><a href="#section-6" class="auto internal xref">6</a>. <a href="#name-security-considerations" class="internal xref">Security Considerations</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6.2.1">
|
||
<p id="section-toc.1-1.6.2.1.1"><a href="#section-6.1" class="auto internal xref">6.1</a>. <a href="#name-sybil-resistance" class="internal xref">Sybil Resistance</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6.2.2">
|
||
<p id="section-toc.1-1.6.2.2.1"><a href="#section-6.2" class="auto internal xref">6.2</a>. <a href="#name-byzantine-fault-tolerance-c" class="internal xref">Byzantine Fault Tolerance Considerations</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6.2.3">
|
||
<p id="section-toc.1-1.6.2.3.1"><a href="#section-6.3" class="auto internal xref">6.3</a>. <a href="#name-capability-spoofing" class="internal xref">Capability Spoofing</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6.2.4">
|
||
<p id="section-toc.1-1.6.2.4.1"><a href="#section-6.4" class="auto internal xref">6.4</a>. <a href="#name-coercion-and-collusion-dete" class="internal xref">Coercion and Collusion Detection</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.7">
|
||
<p id="section-toc.1-1.7.1"><a href="#section-7" class="auto internal xref">7</a>. <a href="#name-iana-considerations" class="internal xref">IANA Considerations</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.7.2.1">
|
||
<p id="section-toc.1-1.7.2.1.1"><a href="#section-7.1" class="auto internal xref">7.1</a>. <a href="#name-consensus-exec_act-values" class="internal xref">Consensus exec_act Values</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.7.2.2">
|
||
<p id="section-toc.1-1.7.2.2.1"><a href="#section-7.2" class="auto internal xref">7.2</a>. <a href="#name-capability-type-registry" class="internal xref">Capability Type Registry</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.8">
|
||
<p id="section-toc.1-1.8.1"><a href="#section-8" class="auto internal xref">8</a>. <a href="#name-references" class="internal xref">References</a></p>
|
||
<ul class="compact toc ulBare ulEmpty">
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.8.2.1">
|
||
<p id="section-toc.1-1.8.2.1.1"><a href="#section-8.1" class="auto internal xref">8.1</a>. <a href="#name-normative-references" class="internal xref">Normative References</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.8.2.2">
|
||
<p id="section-toc.1-1.8.2.2.1"><a href="#section-8.2" class="auto internal xref">8.2</a>. <a href="#name-informative-references" class="internal xref">Informative References</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.9">
|
||
<p id="section-toc.1-1.9.1"><a href="#appendix-A" class="auto internal xref"></a><a href="#name-acknowledgments" class="internal xref">Acknowledgments</a></p>
|
||
</li>
|
||
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.10">
|
||
<p id="section-toc.1-1.10.1"><a href="#appendix-B" class="auto internal xref"></a><a href="#name-authors-address" class="internal xref">Author's Address</a></p>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</section>
|
||
</div>
|
||
<div id="introduction">
|
||
<section id="section-1">
|
||
<h2 id="name-introduction">
|
||
<a href="#section-1" class="section-number selfRef">1. </a><a href="#name-introduction" class="section-name selfRef">Introduction</a>
|
||
</h2>
|
||
<p id="section-1-1">When multiple AI agents collaborate on shared tasks such as network
|
||
management, resource allocation, or policy enforcement, they must
|
||
frequently agree on joint decisions. Currently, no standardized protocol
|
||
exists for agents to propose actions, vote on alternatives, reach
|
||
quorum, or handle disagreements.<a href="#section-1-1" class="pilcrow">¶</a></p>
|
||
<p id="section-1-2">This document addresses Gap 3 (Multi-Agent Consensus) and Gap 10
|
||
(Capability Negotiation) from the gap analysis <span>[<a href="#I-D.nennemann-agent-gap-analysis" class="cite xref">I-D.nennemann-agent-gap-analysis</a>]</span>.
|
||
Gap 3 identifies the absence of formal consensus mechanisms for
|
||
multi-agent coordination, while Gap 10 highlights the lack of dynamic
|
||
capability negotiation during runtime collaboration.<a href="#section-1-2" class="pilcrow">¶</a></p>
|
||
<p id="section-1-3">The protocols defined here enable agents to:<a href="#section-1-3" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-1-4.1">
|
||
<p id="section-1-4.1.1">Propose actions and gather votes from participating agents.<a href="#section-1-4.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-1-4.2">
|
||
<p id="section-1-4.2.1">Reach agreement using multiple consensus mechanisms suited to
|
||
different operational contexts.<a href="#section-1-4.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-1-4.3">
|
||
<p id="section-1-4.3.1">Advertise, discover, and negotiate capabilities dynamically.<a href="#section-1-4.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-1-4.4">
|
||
<p id="section-1-4.4.1">Record consensus and negotiation outcomes in verifiable
|
||
evidence chains via the Execution Chain Trace (ECT)
|
||
framework <span>[<a href="#I-D.nennemann-wimse-ect" class="cite xref">I-D.nennemann-wimse-ect</a>]</span>.<a href="#section-1-4.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
<p id="section-1-5">The human-in-the-loop override protocol defined in
|
||
<span>[<a href="#I-D.nennemann-agent-dag-hitl-safety" class="cite xref">I-D.nennemann-agent-dag-hitl-safety</a>]</span> serves as the ultimate
|
||
escalation path when consensus cannot be reached or when decisions
|
||
exceed agent authority.<a href="#section-1-5" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
<div id="terminology">
|
||
<section id="section-2">
|
||
<h2 id="name-terminology">
|
||
<a href="#section-2" class="section-number selfRef">2. </a><a href="#name-terminology" class="section-name selfRef">Terminology</a>
|
||
</h2>
|
||
<p id="section-2-1">The key words "<span class="bcp14">MUST</span>", "<span class="bcp14">MUST NOT</span>", "<span class="bcp14">REQUIRED</span>", "<span class="bcp14">SHALL</span>", "<span class="bcp14">SHALL NOT</span>", "<span class="bcp14">SHOULD</span>", "<span class="bcp14">SHOULD NOT</span>", "<span class="bcp14">RECOMMENDED</span>", "<span class="bcp14">NOT RECOMMENDED</span>",
|
||
"<span class="bcp14">MAY</span>", and "<span class="bcp14">OPTIONAL</span>" in this document are to be interpreted as
|
||
described in BCP 14 <span>[<a href="#RFC2119" class="cite xref">RFC2119</a>]</span> <span>[<a href="#RFC8174" class="cite xref">RFC8174</a>]</span> when, and only when, they
|
||
appear in all capitals, as shown here.<a href="#section-2-1" class="pilcrow">¶</a></p>
|
||
<p id="section-2-2">The following terms are used throughout this document:<a href="#section-2-2" class="pilcrow">¶</a></p>
|
||
<span class="break"></span><dl class="dlParallel" id="section-2-3">
|
||
<dt id="section-2-3.1">Consensus Round:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.2">
|
||
<p id="section-2-3.2.1">A bounded period during which agents exchange proposals and votes
|
||
to reach agreement on a specific decision.<a href="#section-2-3.2.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.3">Quorum:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.4">
|
||
<p id="section-2-3.4.1">The minimum number of participating agents required for a consensus
|
||
round to produce a valid outcome.<a href="#section-2-3.4.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.5">Proposal:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.6">
|
||
<p id="section-2-3.6.1">A structured message submitted by an agent that describes a
|
||
candidate action or decision for group consideration.<a href="#section-2-3.6.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.7">Vote:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.8">
|
||
<p id="section-2-3.8.1">A response to a proposal indicating approval, rejection, or
|
||
abstention, optionally accompanied by a rationale.<a href="#section-2-3.8.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.9">Leader Agent:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.10">
|
||
<p id="section-2-3.10.1">An agent designated as the coordinator for a consensus round,
|
||
responsible for collecting votes and declaring outcomes.<a href="#section-2-3.10.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.11">Capability Advertisement:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.12">
|
||
<p id="section-2-3.12.1">A structured declaration by an agent of the capabilities it offers
|
||
to other agents in a collaboration.<a href="#section-2-3.12.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.13">Capability Offer:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.14">
|
||
<p id="section-2-3.14.1">A message proposing the use of a specific capability under
|
||
defined terms during a negotiation session.<a href="#section-2-3.14.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.15">Capability Acceptance:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.16">
|
||
<p id="section-2-3.16.1">A binding confirmation that an agent agrees to the terms of a
|
||
capability offer.<a href="#section-2-3.16.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
<dt id="section-2-3.17">Negotiation Session:</dt>
|
||
<dd style="margin-left: 1.5em" id="section-2-3.18">
|
||
<p id="section-2-3.18.1">A bounded interaction between two or more agents for the purpose
|
||
of agreeing on capability usage terms.<a href="#section-2-3.18.1" class="pilcrow">¶</a></p>
|
||
</dd>
|
||
<dd class="break"></dd>
|
||
</dl>
|
||
</section>
|
||
</div>
|
||
<div id="consensus-protocols">
|
||
<section id="section-3">
|
||
<h2 id="name-consensus-protocols">
|
||
<a href="#section-3" class="section-number selfRef">3. </a><a href="#name-consensus-protocols" class="section-name selfRef">Consensus Protocols</a>
|
||
</h2>
|
||
<div id="consensus-model-overview">
|
||
<section id="section-3.1">
|
||
<h3 id="name-consensus-model-overview">
|
||
<a href="#section-3.1" class="section-number selfRef">3.1. </a><a href="#name-consensus-model-overview" class="section-name selfRef">Consensus Model Overview</a>
|
||
</h3>
|
||
<p id="section-3.1-1">The consensus protocol follows a three-phase commit model: propose,
|
||
vote, and commit. The following diagram illustrates the message flow
|
||
for a typical consensus round.<a href="#section-3.1-1" class="pilcrow">¶</a></p>
|
||
<span id="name-consensus-round-message-flo"></span><div id="fig-consensus-flow">
|
||
<figure id="figure-1">
|
||
<div class="alignLeft art-ascii-art art-text artwork" id="section-3.1-2.1">
|
||
<pre>
|
||
Agent A Leader Agent B Agent C
|
||
| | | |
|
||
|--- Propose ---->| | |
|
||
| |-- Vote Req --->| |
|
||
| |-- Vote Req ------------------> |
|
||
| | | |
|
||
| |<-- Vote -------| |
|
||
| |<-- Vote ---------------------- |
|
||
| | | |
|
||
| |--- Tally & Decide ----------> |
|
||
|<-- Commit ------| | |
|
||
| |-- Commit ----->| |
|
||
| |-- Commit -------------------> |
|
||
| | | |
|
||
</pre>
|
||
</div>
|
||
<figcaption><a href="#figure-1" class="selfRef">Figure 1</a>:
|
||
<a href="#name-consensus-round-message-flo" class="selfRef">Consensus Round Message Flow</a>
|
||
</figcaption></figure>
|
||
</div>
|
||
<ol start="1" type="1" class="normal type-1" id="section-3.1-3">
|
||
<li id="section-3.1-3.1">
|
||
<p id="section-3.1-3.1.1"><strong>Propose</strong>: An agent submits a proposal to the leader agent.<a href="#section-3.1-3.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-3.1-3.2">
|
||
<p id="section-3.1-3.2.1"><strong>Vote</strong>: The leader distributes the proposal to all participants
|
||
and collects votes within the timeout window.<a href="#section-3.1-3.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-3.1-3.3">
|
||
<p id="section-3.1-3.3.1"><strong>Commit/Abort</strong>: The leader evaluates votes against the quorum
|
||
and consensus mechanism rules, then issues a commit or abort
|
||
signal to all participants.<a href="#section-3.1-3.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
</div>
|
||
<div id="consensus-mechanisms">
|
||
<section id="section-3.2">
|
||
<h3 id="name-consensus-mechanisms">
|
||
<a href="#section-3.2" class="section-number selfRef">3.2. </a><a href="#name-consensus-mechanisms" class="section-name selfRef">Consensus Mechanisms</a>
|
||
</h3>
|
||
<p id="section-3.2-1">This specification defines four consensus mechanisms. Implementations
|
||
<span class="bcp14">MUST</span> support simple majority voting and <span class="bcp14">SHOULD</span> support at least one
|
||
additional mechanism.<a href="#section-3.2-1" class="pilcrow">¶</a></p>
|
||
<div id="simple-majority-voting">
|
||
<section id="section-3.2.1">
|
||
<h4 id="name-simple-majority-voting">
|
||
<a href="#section-3.2.1" class="section-number selfRef">3.2.1. </a><a href="#name-simple-majority-voting" class="section-name selfRef">Simple Majority Voting</a>
|
||
</h4>
|
||
<p id="section-3.2.1-1">A proposal is accepted if more than half of the votes received are
|
||
approvals. Abstentions do not count toward the total.<a href="#section-3.2.1-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.2.1-2.1">
|
||
<p id="section-3.2.1-2.1.1">Quorum: A minimum of ceil(N/2) votes must be received, where N
|
||
is the number of eligible voters.<a href="#section-3.2.1-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.2.1-2.2">
|
||
<p id="section-3.2.1-2.2.1">Ties result in rejection of the proposal.<a href="#section-3.2.1-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="weighted-consensus">
|
||
<section id="section-3.2.2">
|
||
<h4 id="name-weighted-consensus">
|
||
<a href="#section-3.2.2" class="section-number selfRef">3.2.2. </a><a href="#name-weighted-consensus" class="section-name selfRef">Weighted Consensus</a>
|
||
</h4>
|
||
<p id="section-3.2.2-1">Each agent is assigned a weight reflecting its trust score, domain
|
||
expertise, or capability level. A proposal is accepted if the sum
|
||
of approval weights exceeds a configured threshold (default: 50%
|
||
of total weight).<a href="#section-3.2.2-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.2.2-2.1">
|
||
<p id="section-3.2.2-2.1.1">Weights <span class="bcp14">MUST</span> be distributed and agreed upon before the consensus
|
||
round begins.<a href="#section-3.2.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.2.2-2.2">
|
||
<p id="section-3.2.2-2.2.1">Weight assignments <span class="bcp14">SHOULD</span> be recorded in the ECT for
|
||
auditability.<a href="#section-3.2.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="leader-based-consensus">
|
||
<section id="section-3.2.3">
|
||
<h4 id="name-leader-based-consensus">
|
||
<a href="#section-3.2.3" class="section-number selfRef">3.2.3. </a><a href="#name-leader-based-consensus" class="section-name selfRef">Leader-Based Consensus</a>
|
||
</h4>
|
||
<p id="section-3.2.3-1">A designated leader agent makes the final decision after soliciting
|
||
input from participants. Participant votes serve as advisory input
|
||
rather than binding decisions.<a href="#section-3.2.3-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.2.3-2.1">
|
||
<p id="section-3.2.3-2.1.1">The leader <span class="bcp14">MUST</span> provide a rationale when overriding participant
|
||
recommendations.<a href="#section-3.2.3-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.2.3-2.2">
|
||
<p id="section-3.2.3-2.2.1">Leader designation <span class="bcp14">SHOULD</span> rotate or be determined by a
|
||
higher-level policy.<a href="#section-3.2.3-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.2.3-2.3">
|
||
<p id="section-3.2.3-2.3.1">This mechanism is appropriate for time-critical decisions where
|
||
full consensus would introduce unacceptable delay.<a href="#section-3.2.3-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="optimistic-consensus">
|
||
<section id="section-3.2.4">
|
||
<h4 id="name-optimistic-consensus">
|
||
<a href="#section-3.2.4" class="section-number selfRef">3.2.4. </a><a href="#name-optimistic-consensus" class="section-name selfRef">Optimistic Consensus</a>
|
||
</h4>
|
||
<p id="section-3.2.4-1">A proposal is considered accepted unless an objection is raised
|
||
within the timeout window. This mechanism minimizes communication
|
||
overhead for routine decisions.<a href="#section-3.2.4-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.2.4-2.1">
|
||
<p id="section-3.2.4-2.1.1">Any single objection blocks the proposal.<a href="#section-3.2.4-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.2.4-2.2">
|
||
<p id="section-3.2.4-2.2.1">The objecting agent <span class="bcp14">MUST</span> provide a rationale.<a href="#section-3.2.4-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.2.4-2.3">
|
||
<p id="section-3.2.4-2.3.1">Optimistic consensus <span class="bcp14">SHOULD</span> only be used for low-risk,
|
||
reversible decisions.<a href="#section-3.2.4-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="consensus-message-format">
|
||
<section id="section-3.3">
|
||
<h3 id="name-consensus-message-format">
|
||
<a href="#section-3.3" class="section-number selfRef">3.3. </a><a href="#name-consensus-message-format" class="section-name selfRef">Consensus Message Format</a>
|
||
</h3>
|
||
<div id="proposal-message-structure">
|
||
<section id="section-3.3.1">
|
||
<h4 id="name-proposal-message-structure">
|
||
<a href="#section-3.3.1" class="section-number selfRef">3.3.1. </a><a href="#name-proposal-message-structure" class="section-name selfRef">Proposal Message Structure</a>
|
||
</h4>
|
||
<p id="section-3.3.1-1">A proposal message <span class="bcp14">MUST</span> contain the following fields:<a href="#section-3.3.1-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.3.1-2.1">
|
||
<p id="section-3.3.1-2.1.1"><strong>proposal_id</strong>: A globally unique identifier for the proposal
|
||
(UUID format).<a href="#section-3.3.1-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.2">
|
||
<p id="section-3.3.1-2.2.1"><strong>proposer</strong>: The identity of the proposing agent.<a href="#section-3.3.1-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.3">
|
||
<p id="section-3.3.1-2.3.1"><strong>consensus_round_id</strong>: Identifier for the consensus round.<a href="#section-3.3.1-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.4">
|
||
<p id="section-3.3.1-2.4.1"><strong>mechanism</strong>: The consensus mechanism to use (one of "majority",
|
||
"weighted", "leader", "optimistic").<a href="#section-3.3.1-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.5">
|
||
<p id="section-3.3.1-2.5.1"><strong>subject</strong>: A human-readable summary of the proposal.<a href="#section-3.3.1-2.5.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.6">
|
||
<p id="section-3.3.1-2.6.1"><strong>action</strong>: A structured description of the proposed action.<a href="#section-3.3.1-2.6.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.7">
|
||
<p id="section-3.3.1-2.7.1"><strong>timeout</strong>: The deadline for vote collection (as an absolute
|
||
timestamp per <span>[<a href="#RFC9110" class="cite xref">RFC9110</a>]</span> Section 5.6.7).<a href="#section-3.3.1-2.7.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.8">
|
||
<p id="section-3.3.1-2.8.1"><strong>quorum</strong>: The minimum number of votes required.<a href="#section-3.3.1-2.8.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.1-2.9">
|
||
<p id="section-3.3.1-2.9.1"><strong>participants</strong>: List of agent identifiers eligible to vote.<a href="#section-3.3.1-2.9.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="vote-message-structure">
|
||
<section id="section-3.3.2">
|
||
<h4 id="name-vote-message-structure">
|
||
<a href="#section-3.3.2" class="section-number selfRef">3.3.2. </a><a href="#name-vote-message-structure" class="section-name selfRef">Vote Message Structure</a>
|
||
</h4>
|
||
<p id="section-3.3.2-1">A vote message <span class="bcp14">MUST</span> contain the following fields:<a href="#section-3.3.2-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.3.2-2.1">
|
||
<p id="section-3.3.2-2.1.1"><strong>proposal_id</strong>: The identifier of the proposal being voted on.<a href="#section-3.3.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.2-2.2">
|
||
<p id="section-3.3.2-2.2.1"><strong>voter</strong>: The identity of the voting agent.<a href="#section-3.3.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.2-2.3">
|
||
<p id="section-3.3.2-2.3.1"><strong>decision</strong>: One of "approve", "reject", or "abstain".<a href="#section-3.3.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.2-2.4">
|
||
<p id="section-3.3.2-2.4.1"><strong>rationale</strong>: A human-readable explanation for the vote
|
||
(<span class="bcp14">REQUIRED</span> for "reject", <span class="bcp14">OPTIONAL</span> for others).<a href="#section-3.3.2-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.2-2.5">
|
||
<p id="section-3.3.2-2.5.1"><strong>timestamp</strong>: The time the vote was cast.<a href="#section-3.3.2-2.5.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.2-2.6">
|
||
<p id="section-3.3.2-2.6.1"><strong>signature</strong>: A JWS <span>[<a href="#RFC7515" class="cite xref">RFC7515</a>]</span> signature over the vote content
|
||
for non-repudiation.<a href="#section-3.3.2-2.6.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="commit-and-abort-signals">
|
||
<section id="section-3.3.3">
|
||
<h4 id="name-commit-and-abort-signals">
|
||
<a href="#section-3.3.3" class="section-number selfRef">3.3.3. </a><a href="#name-commit-and-abort-signals" class="section-name selfRef">Commit and Abort Signals</a>
|
||
</h4>
|
||
<p id="section-3.3.3-1">After vote collection, the leader issues either a commit or abort
|
||
signal:<a href="#section-3.3.3-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.3.3-2.1">
|
||
<p id="section-3.3.3-2.1.1"><strong>Commit</strong>: Indicates the proposal was accepted. All participants
|
||
<span class="bcp14">MUST</span> execute the agreed action.<a href="#section-3.3.3-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.3.3-2.2">
|
||
<p id="section-3.3.3-2.2.1"><strong>Abort</strong>: Indicates the proposal was rejected. Participants <span class="bcp14">MUST NOT</span> execute the proposed action.<a href="#section-3.3.3-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
<p id="section-3.3.3-3">Both signals <span class="bcp14">MUST</span> include the proposal_id, the final tally, and a
|
||
JWS signature from the leader.<a href="#section-3.3.3-3" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="quorum-and-timeout-rules">
|
||
<section id="section-3.4">
|
||
<h3 id="name-quorum-and-timeout-rules">
|
||
<a href="#section-3.4" class="section-number selfRef">3.4. </a><a href="#name-quorum-and-timeout-rules" class="section-name selfRef">Quorum and Timeout Rules</a>
|
||
</h3>
|
||
<div id="quorum-calculation">
|
||
<section id="section-3.4.1">
|
||
<h4 id="name-quorum-calculation">
|
||
<a href="#section-3.4.1" class="section-number selfRef">3.4.1. </a><a href="#name-quorum-calculation" class="section-name selfRef">Quorum Calculation</a>
|
||
</h4>
|
||
<p id="section-3.4.1-1">The quorum for a consensus round is determined by the consensus
|
||
mechanism in use:<a href="#section-3.4.1-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.4.1-2.1">
|
||
<p id="section-3.4.1-2.1.1"><strong>Simple majority</strong>: ceil(N/2) where N is the number of
|
||
eligible voters.<a href="#section-3.4.1-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.4.1-2.2">
|
||
<p id="section-3.4.1-2.2.1"><strong>Weighted</strong>: Agents representing at least 50% of total weight
|
||
must participate.<a href="#section-3.4.1-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.4.1-2.3">
|
||
<p id="section-3.4.1-2.3.1"><strong>Leader-based</strong>: No quorum required; leader decides
|
||
independently.<a href="#section-3.4.1-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.4.1-2.4">
|
||
<p id="section-3.4.1-2.4.1"><strong>Optimistic</strong>: All eligible agents are considered participants;
|
||
silence counts as approval.<a href="#section-3.4.1-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="timeout-semantics-and-fallback-behavior">
|
||
<section id="section-3.4.2">
|
||
<h4 id="name-timeout-semantics-and-fallb">
|
||
<a href="#section-3.4.2" class="section-number selfRef">3.4.2. </a><a href="#name-timeout-semantics-and-fallb" class="section-name selfRef">Timeout Semantics and Fallback Behavior</a>
|
||
</h4>
|
||
<p id="section-3.4.2-1">Each consensus round <span class="bcp14">MUST</span> specify a timeout. If quorum is not
|
||
reached before the timeout:<a href="#section-3.4.2-1" class="pilcrow">¶</a></p>
|
||
<ol start="1" type="1" class="normal type-1" id="section-3.4.2-2">
|
||
<li id="section-3.4.2-2.1">
|
||
<p id="section-3.4.2-2.1.1">The leader <span class="bcp14">MUST</span> issue an abort signal.<a href="#section-3.4.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-3.4.2-2.2">
|
||
<p id="section-3.4.2-2.2.1">The proposing agent <span class="bcp14">MAY</span> re-submit the proposal with a longer
|
||
timeout or reduced quorum.<a href="#section-3.4.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-3.4.2-2.3">
|
||
<p id="section-3.4.2-2.3.1">If the decision is time-critical, the leader <span class="bcp14">MAY</span> escalate to
|
||
a human operator via the override protocol defined in
|
||
<span>[<a href="#I-D.nennemann-agent-dag-hitl-safety" class="cite xref">I-D.nennemann-agent-dag-hitl-safety</a>]</span>.<a href="#section-3.4.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ol>
|
||
<p id="section-3.4.2-3">Implementations <span class="bcp14">SHOULD</span> use exponential backoff for re-submissions
|
||
with a maximum retry count of 3.<a href="#section-3.4.2-3" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
<div id="split-brain-prevention">
|
||
<section id="section-3.4.3">
|
||
<h4 id="name-split-brain-prevention">
|
||
<a href="#section-3.4.3" class="section-number selfRef">3.4.3. </a><a href="#name-split-brain-prevention" class="section-name selfRef">Split-Brain Prevention</a>
|
||
</h4>
|
||
<p id="section-3.4.3-1">In distributed deployments where network partitions may occur:<a href="#section-3.4.3-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.4.3-2.1">
|
||
<p id="section-3.4.3-2.1.1">A consensus round is valid only if the leader can verify
|
||
connectivity to a majority of participants.<a href="#section-3.4.3-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.4.3-2.2">
|
||
<p id="section-3.4.3-2.2.1">If a partition is detected, all in-progress consensus rounds
|
||
<span class="bcp14">MUST</span> be suspended until connectivity is restored.<a href="#section-3.4.3-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.4.3-2.3">
|
||
<p id="section-3.4.3-2.3.1">Agents <span class="bcp14">MUST NOT</span> accept commit signals from multiple leaders
|
||
for the same consensus round.<a href="#section-3.4.3-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="conflict-resolution">
|
||
<section id="section-3.5">
|
||
<h3 id="name-conflict-resolution">
|
||
<a href="#section-3.5" class="section-number selfRef">3.5. </a><a href="#name-conflict-resolution" class="section-name selfRef">Conflict Resolution</a>
|
||
</h3>
|
||
<div id="priority-based-resolution">
|
||
<section id="section-3.5.1">
|
||
<h4 id="name-priority-based-resolution">
|
||
<a href="#section-3.5.1" class="section-number selfRef">3.5.1. </a><a href="#name-priority-based-resolution" class="section-name selfRef">Priority-Based Resolution</a>
|
||
</h4>
|
||
<p id="section-3.5.1-1">When multiple competing proposals address the same resource or
|
||
decision:<a href="#section-3.5.1-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.5.1-2.1">
|
||
<p id="section-3.5.1-2.1.1">Proposals are ranked by a priority score derived from the
|
||
urgency of the decision, the authority level of the proposer,
|
||
and the specificity of the proposed action.<a href="#section-3.5.1-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.5.1-2.2">
|
||
<p id="section-3.5.1-2.2.1">Higher-priority proposals are evaluated first.<a href="#section-3.5.1-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.5.1-2.3">
|
||
<p id="section-3.5.1-2.3.1">Lower-priority proposals that conflict with an accepted
|
||
higher-priority proposal are automatically rejected.<a href="#section-3.5.1-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="escalation-to-human-operator">
|
||
<section id="section-3.5.2">
|
||
<h4 id="name-escalation-to-human-operato">
|
||
<a href="#section-3.5.2" class="section-number selfRef">3.5.2. </a><a href="#name-escalation-to-human-operato" class="section-name selfRef">Escalation to Human Operator</a>
|
||
</h4>
|
||
<p id="section-3.5.2-1">If consensus cannot be reached after the maximum number of retries,
|
||
or if agents are deadlocked:<a href="#section-3.5.2-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.5.2-2.1">
|
||
<p id="section-3.5.2-2.1.1">The leader <span class="bcp14">MUST</span> escalate to a human operator using the override
|
||
protocol defined in <span>[<a href="#I-D.nennemann-agent-dag-hitl-safety" class="cite xref">I-D.nennemann-agent-dag-hitl-safety</a>]</span>.<a href="#section-3.5.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.5.2-2.2">
|
||
<p id="section-3.5.2-2.2.1">The escalation message <span class="bcp14">MUST</span> include the proposal, all votes
|
||
received, and the reason for escalation.<a href="#section-3.5.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.5.2-2.3">
|
||
<p id="section-3.5.2-2.3.1">The human operator's decision is binding and <span class="bcp14">MUST</span> be recorded
|
||
in the ECT.<a href="#section-3.5.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="deadlock-detection-and-breaking">
|
||
<section id="section-3.5.3">
|
||
<h4 id="name-deadlock-detection-and-brea">
|
||
<a href="#section-3.5.3" class="section-number selfRef">3.5.3. </a><a href="#name-deadlock-detection-and-brea" class="section-name selfRef">Deadlock Detection and Breaking</a>
|
||
</h4>
|
||
<p id="section-3.5.3-1">A deadlock exists when:<a href="#section-3.5.3-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-3.5.3-2.1">
|
||
<p id="section-3.5.3-2.1.1">Two or more proposals mutually block each other (circular
|
||
dependency).<a href="#section-3.5.3-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-3.5.3-2.2">
|
||
<p id="section-3.5.3-2.2.1">A consensus round cannot reach quorum due to persistent
|
||
abstentions or non-responsive agents.<a href="#section-3.5.3-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
<p id="section-3.5.3-3">Deadlock breaking strategies:<a href="#section-3.5.3-3" class="pilcrow">¶</a></p>
|
||
<ol start="1" type="1" class="normal type-1" id="section-3.5.3-4">
|
||
<li id="section-3.5.3-4.1">
|
||
<p id="section-3.5.3-4.1.1"><strong>Timeout-based</strong>: The oldest proposal takes precedence.<a href="#section-3.5.3-4.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-3.5.3-4.2">
|
||
<p id="section-3.5.3-4.2.1"><strong>Random selection</strong>: A verifiable random function selects
|
||
the winning proposal.<a href="#section-3.5.3-4.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-3.5.3-4.3">
|
||
<p id="section-3.5.3-4.3.1"><strong>Escalation</strong>: The deadlock is escalated to a human operator.<a href="#section-3.5.3-4.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ol>
|
||
<p id="section-3.5.3-5">The leader <span class="bcp14">MUST</span> detect deadlocks within two consecutive failed
|
||
consensus rounds on related proposals.<a href="#section-3.5.3-5" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="capability-negotiation">
|
||
<section id="section-4">
|
||
<h2 id="name-capability-negotiation">
|
||
<a href="#section-4" class="section-number selfRef">4. </a><a href="#name-capability-negotiation" class="section-name selfRef">Capability Negotiation</a>
|
||
</h2>
|
||
<div id="capability-advertisement-format">
|
||
<section id="section-4.1">
|
||
<h3 id="name-capability-advertisement-fo">
|
||
<a href="#section-4.1" class="section-number selfRef">4.1. </a><a href="#name-capability-advertisement-fo" class="section-name selfRef">Capability Advertisement Format</a>
|
||
</h3>
|
||
<div id="extending-agent-discovery-with-capability-descriptors">
|
||
<section id="section-4.1.1">
|
||
<h4 id="name-extending-agent-discovery-w">
|
||
<a href="#section-4.1.1" class="section-number selfRef">4.1.1. </a><a href="#name-extending-agent-discovery-w" class="section-name selfRef">Extending Agent Discovery with Capability Descriptors</a>
|
||
</h4>
|
||
<p id="section-4.1.1-1">Agents <span class="bcp14">MUST</span> advertise their capabilities using a structured
|
||
descriptor format. Capability advertisements extend the agent
|
||
discovery mechanism and <span class="bcp14">SHOULD</span> be published during agent
|
||
registration.<a href="#section-4.1.1-1" class="pilcrow">¶</a></p>
|
||
<p id="section-4.1.1-2">A capability descriptor <span class="bcp14">MUST</span> include:<a href="#section-4.1.1-2" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.1.1-3.1">
|
||
<p id="section-4.1.1-3.1.1"><strong>agent_id</strong>: The identity of the advertising agent.<a href="#section-4.1.1-3.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.1-3.2">
|
||
<p id="section-4.1.1-3.2.1"><strong>capabilities</strong>: An array of capability objects, each containing:<a href="#section-4.1.1-3.2.1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.1.1-3.2.2.1">
|
||
<p id="section-4.1.1-3.2.2.1.1"><strong>type</strong>: The capability type from the capability registry
|
||
(see <a href="#capability-registry" class="auto internal xref">Section 4.3</a>).<a href="#section-4.1.1-3.2.2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.1-3.2.2.2">
|
||
<p id="section-4.1.1-3.2.2.2.1"><strong>version</strong>: The version of the capability implementation.<a href="#section-4.1.1-3.2.2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.1-3.2.2.3">
|
||
<p id="section-4.1.1-3.2.2.3.1"><strong>parameters</strong>: Capability-specific configuration parameters.<a href="#section-4.1.1-3.2.2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.1-3.2.2.4">
|
||
<p id="section-4.1.1-3.2.2.4.1"><strong>constraints</strong>: Limitations on capability usage (e.g., rate
|
||
limits, maximum payload size).<a href="#section-4.1.1-3.2.2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.1-3.2.2.5">
|
||
<p id="section-4.1.1-3.2.2.5.1"><strong>availability</strong>: Current availability status ("available",
|
||
"busy", "degraded", "unavailable").<a href="#section-4.1.1-3.2.2.5.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="capability-categories">
|
||
<section id="section-4.1.2">
|
||
<h4 id="name-capability-categories">
|
||
<a href="#section-4.1.2" class="section-number selfRef">4.1.2. </a><a href="#name-capability-categories" class="section-name selfRef">Capability Categories</a>
|
||
</h4>
|
||
<p id="section-4.1.2-1">Capabilities are organized into the following categories:<a href="#section-4.1.2-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.1.2-2.1">
|
||
<p id="section-4.1.2-2.1.1"><strong>Compute</strong>: Processing power, model inference, data
|
||
transformation.<a href="#section-4.1.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.2-2.2">
|
||
<p id="section-4.1.2-2.2.1"><strong>Knowledge</strong>: Domain expertise, access to knowledge bases,
|
||
training data coverage.<a href="#section-4.1.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.2-2.3">
|
||
<p id="section-4.1.2-2.3.1"><strong>Tool Access</strong>: Integration with external tools, APIs, or
|
||
services.<a href="#section-4.1.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.2-2.4">
|
||
<p id="section-4.1.2-2.4.1"><strong>Authorization Scope</strong>: Permissions and access levels the agent
|
||
holds in various systems.<a href="#section-4.1.2-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="version-and-compatibility-metadata">
|
||
<section id="section-4.1.3">
|
||
<h4 id="name-version-and-compatibility-m">
|
||
<a href="#section-4.1.3" class="section-number selfRef">4.1.3. </a><a href="#name-version-and-compatibility-m" class="section-name selfRef">Version and Compatibility Metadata</a>
|
||
</h4>
|
||
<p id="section-4.1.3-1">Each capability advertisement <span class="bcp14">MUST</span> include version information
|
||
to enable compatibility checking:<a href="#section-4.1.3-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.1.3-2.1">
|
||
<p id="section-4.1.3-2.1.1"><strong>min_version</strong>: The minimum protocol version supported.<a href="#section-4.1.3-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.3-2.2">
|
||
<p id="section-4.1.3-2.2.1"><strong>max_version</strong>: The maximum protocol version supported.<a href="#section-4.1.3-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.1.3-2.3">
|
||
<p id="section-4.1.3-2.3.1"><strong>deprecated_versions</strong>: A list of versions that are supported
|
||
but deprecated.<a href="#section-4.1.3-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
<p id="section-4.1.3-3">Agents <span class="bcp14">MUST</span> negotiate a mutually supported version before
|
||
initiating capability usage.<a href="#section-4.1.3-3" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="dynamic-negotiation-protocol">
|
||
<section id="section-4.2">
|
||
<h3 id="name-dynamic-negotiation-protoco">
|
||
<a href="#section-4.2" class="section-number selfRef">4.2. </a><a href="#name-dynamic-negotiation-protoco" class="section-name selfRef">Dynamic Negotiation Protocol</a>
|
||
</h3>
|
||
<div id="negotiation-initiation-and-session-management">
|
||
<section id="section-4.2.1">
|
||
<h4 id="name-negotiation-initiation-and-">
|
||
<a href="#section-4.2.1" class="section-number selfRef">4.2.1. </a><a href="#name-negotiation-initiation-and-" class="section-name selfRef">Negotiation Initiation and Session Management</a>
|
||
</h4>
|
||
<p id="section-4.2.1-1">A negotiation session is initiated when an agent requires a
|
||
capability that it does not possess but has identified in another
|
||
agent's advertisement.<a href="#section-4.2.1-1" class="pilcrow">¶</a></p>
|
||
<ol start="1" type="1" class="normal type-1" id="section-4.2.1-2">
|
||
<li id="section-4.2.1-2.1">
|
||
<p id="section-4.2.1-2.1.1">The initiating agent sends a <strong>Negotiation Request</strong> specifying
|
||
the desired capability type and parameters.<a href="#section-4.2.1-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-4.2.1-2.2">
|
||
<p id="section-4.2.1-2.2.1">The target agent responds with a <strong>Negotiation Response</strong>
|
||
indicating willingness to negotiate.<a href="#section-4.2.1-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-4.2.1-2.3">
|
||
<p id="section-4.2.1-2.3.1">A <strong>session_id</strong> is established for tracking the negotiation.<a href="#section-4.2.1-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ol>
|
||
<p id="section-4.2.1-3">Sessions have a configurable timeout (default: 60 seconds) and
|
||
<span class="bcp14">MUST</span> be explicitly closed by either party.<a href="#section-4.2.1-3" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
<div id="offercounter-offer-exchange">
|
||
<section id="section-4.2.2">
|
||
<h4 id="name-offer-counter-offer-exchang">
|
||
<a href="#section-4.2.2" class="section-number selfRef">4.2.2. </a><a href="#name-offer-counter-offer-exchang" class="section-name selfRef">Offer/Counter-Offer Exchange</a>
|
||
</h4>
|
||
<p id="section-4.2.2-1">Once a session is established:<a href="#section-4.2.2-1" class="pilcrow">¶</a></p>
|
||
<ol start="1" type="1" class="normal type-1" id="section-4.2.2-2">
|
||
<li id="section-4.2.2-2.1">
|
||
<p id="section-4.2.2-2.1.1">The initiating agent sends a <strong>Capability Offer</strong> specifying
|
||
the desired terms of use (duration, rate limits, data handling
|
||
requirements).<a href="#section-4.2.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li id="section-4.2.2-2.2">
|
||
<p id="section-4.2.2-2.2.1">The target agent may respond with:<a href="#section-4.2.2-2.2.1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.2.2-2.2.2.1">
|
||
<p id="section-4.2.2-2.2.2.1.1"><strong>Accept</strong>: Agreement to the offered terms.<a href="#section-4.2.2-2.2.2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.2.2-2.2.2.2">
|
||
<p id="section-4.2.2-2.2.2.2.1"><strong>Counter-Offer</strong>: Modified terms for the initiator to
|
||
consider.<a href="#section-4.2.2-2.2.2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.2.2-2.2.2.3">
|
||
<p id="section-4.2.2-2.2.2.3.1"><strong>Reject</strong>: Refusal to provide the capability, with a
|
||
rationale.<a href="#section-4.2.2-2.2.2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li id="section-4.2.2-2.3">
|
||
<p id="section-4.2.2-2.3.1">Counter-offers may continue for a maximum of 5 rounds before
|
||
the negotiation <span class="bcp14">MUST</span> be concluded or abandoned.<a href="#section-4.2.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
</div>
|
||
<div id="acceptance-and-binding">
|
||
<section id="section-4.2.3">
|
||
<h4 id="name-acceptance-and-binding">
|
||
<a href="#section-4.2.3" class="section-number selfRef">4.2.3. </a><a href="#name-acceptance-and-binding" class="section-name selfRef">Acceptance and Binding</a>
|
||
</h4>
|
||
<p id="section-4.2.3-1">When both parties agree on terms:<a href="#section-4.2.3-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.2.3-2.1">
|
||
<p id="section-4.2.3-2.1.1">A <strong>Capability Agreement</strong> is created containing the final terms,
|
||
signed by both parties using JWS <span>[<a href="#RFC7515" class="cite xref">RFC7515</a>]</span>.<a href="#section-4.2.3-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.2.3-2.2">
|
||
<p id="section-4.2.3-2.2.1">The agreement includes a unique <strong>agreement_id</strong>, the agreed
|
||
capability parameters, duration, and any usage constraints.<a href="#section-4.2.3-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.2.3-2.3">
|
||
<p id="section-4.2.3-2.3.1">Both agents <span class="bcp14">MUST</span> honor the agreement until its expiration or
|
||
explicit revocation.<a href="#section-4.2.3-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="re-negotiation-during-runtime">
|
||
<section id="section-4.2.4">
|
||
<h4 id="name-re-negotiation-during-runti">
|
||
<a href="#section-4.2.4" class="section-number selfRef">4.2.4. </a><a href="#name-re-negotiation-during-runti" class="section-name selfRef">Re-Negotiation During Runtime</a>
|
||
</h4>
|
||
<p id="section-4.2.4-1">Either party <span class="bcp14">MAY</span> initiate re-negotiation of an active agreement
|
||
when:<a href="#section-4.2.4-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.2.4-2.1">
|
||
<p id="section-4.2.4-2.1.1">Resource availability changes.<a href="#section-4.2.4-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.2.4-2.2">
|
||
<p id="section-4.2.4-2.2.1">New constraints are imposed by external factors.<a href="#section-4.2.4-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.2.4-2.3">
|
||
<p id="section-4.2.4-2.3.1">The original terms are no longer adequate.<a href="#section-4.2.4-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
<p id="section-4.2.4-3">Re-negotiation follows the same offer/counter-offer protocol but
|
||
references the existing agreement_id.<a href="#section-4.2.4-3" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="capability-registry">
|
||
<section id="section-4.3">
|
||
<h3 id="name-capability-registry">
|
||
<a href="#section-4.3" class="section-number selfRef">4.3. </a><a href="#name-capability-registry" class="section-name selfRef">Capability Registry</a>
|
||
</h3>
|
||
<div id="well-known-capability-types">
|
||
<section id="section-4.3.1">
|
||
<h4 id="name-well-known-capability-types">
|
||
<a href="#section-4.3.1" class="section-number selfRef">4.3.1. </a><a href="#name-well-known-capability-types" class="section-name selfRef">Well-Known Capability Types</a>
|
||
</h4>
|
||
<p id="section-4.3.1-1">The following capability types are defined as initial entries in
|
||
the capability registry:<a href="#section-4.3.1-1" class="pilcrow">¶</a></p>
|
||
<span id="name-well-known-capability-types-2"></span><div id="tab-capability-types">
|
||
<table class="center" id="table-1">
|
||
<caption>
|
||
<a href="#table-1" class="selfRef">Table 1</a>:
|
||
<a href="#name-well-known-capability-types-2" class="selfRef">Well-Known Capability Types</a>
|
||
</caption>
|
||
<thead>
|
||
<tr>
|
||
<th class="text-left" rowspan="1" colspan="1">Type ID</th>
|
||
<th class="text-left" rowspan="1" colspan="1">Category</th>
|
||
<th class="text-left" rowspan="1" colspan="1">Description</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">compute.inference</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Compute</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Model inference execution</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">compute.transform</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Compute</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Data transformation and processing</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">knowledge.domain</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Knowledge</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Domain-specific expertise</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">knowledge.retrieval</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Knowledge</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Information retrieval from knowledge bases</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">tool.api</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Tool Access</td>
|
||
<td class="text-left" rowspan="1" colspan="1">External API integration</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">tool.execution</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Tool Access</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Tool or script execution</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">authz.delegate</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Authorization</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Delegated authorization scope</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">authz.verify</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Authorization</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Credential and permission verification</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="extension-mechanism-for-custom-capabilities">
|
||
<section id="section-4.3.2">
|
||
<h4 id="name-extension-mechanism-for-cus">
|
||
<a href="#section-4.3.2" class="section-number selfRef">4.3.2. </a><a href="#name-extension-mechanism-for-cus" class="section-name selfRef">Extension Mechanism for Custom Capabilities</a>
|
||
</h4>
|
||
<p id="section-4.3.2-1">Organizations <span class="bcp14">MAY</span> define custom capability types using a reverse
|
||
domain name prefix (e.g., "com.example.custom-capability"). Custom
|
||
capability types:<a href="#section-4.3.2-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-4.3.2-2.1">
|
||
<p id="section-4.3.2-2.1.1"><span class="bcp14">MUST NOT</span> conflict with well-known capability type identifiers.<a href="#section-4.3.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.3.2-2.2">
|
||
<p id="section-4.3.2-2.2.1"><span class="bcp14">SHOULD</span> be registered with IANA for interoperability when intended
|
||
for broad use.<a href="#section-4.3.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-4.3.2-2.3">
|
||
<p id="section-4.3.2-2.3.1"><span class="bcp14">MUST</span> include a human-readable description and a machine-readable
|
||
schema for parameters.<a href="#section-4.3.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="ect-integration">
|
||
<section id="section-5">
|
||
<h2 id="name-ect-integration">
|
||
<a href="#section-5" class="section-number selfRef">5. </a><a href="#name-ect-integration" class="section-name selfRef">ECT Integration</a>
|
||
</h2>
|
||
<p id="section-5-1">Consensus and capability negotiation events <span class="bcp14">MUST</span> be recorded in the
|
||
Execution Chain Trace (ECT) framework defined in
|
||
<span>[<a href="#I-D.nennemann-wimse-ect" class="cite xref">I-D.nennemann-wimse-ect</a>]</span> to provide a verifiable audit trail.<a href="#section-5-1" class="pilcrow">¶</a></p>
|
||
<div id="consensus-evidence-in-ect-nodes">
|
||
<section id="section-5.1">
|
||
<h3 id="name-consensus-evidence-in-ect-n">
|
||
<a href="#section-5.1" class="section-number selfRef">5.1. </a><a href="#name-consensus-evidence-in-ect-n" class="section-name selfRef">Consensus Evidence in ECT Nodes</a>
|
||
</h3>
|
||
<p id="section-5.1-1">The following exec_act values are defined for consensus operations:<a href="#section-5.1-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-5.1-2.1">
|
||
<p id="section-5.1-2.1.1"><strong>consensus_propose</strong>: Records the submission of a proposal.
|
||
The ECT node <span class="bcp14">MUST</span> include the proposal_id, proposer identity,
|
||
and proposal summary.<a href="#section-5.1-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-5.1-2.2">
|
||
<p id="section-5.1-2.2.1"><strong>consensus_vote</strong>: Records a vote cast by an agent. The ECT
|
||
node <span class="bcp14">MUST</span> include the proposal_id, voter identity, decision,
|
||
and rationale (if provided).<a href="#section-5.1-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-5.1-2.3">
|
||
<p id="section-5.1-2.3.1"><strong>consensus_commit</strong>: Records the outcome of a consensus round.
|
||
The ECT node <span class="bcp14">MUST</span> include the proposal_id, final tally,
|
||
outcome (commit or abort), and the leader's signature.<a href="#section-5.1-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="capability-negotiation-records-in-ect">
|
||
<section id="section-5.2">
|
||
<h3 id="name-capability-negotiation-reco">
|
||
<a href="#section-5.2" class="section-number selfRef">5.2. </a><a href="#name-capability-negotiation-reco" class="section-name selfRef">Capability Negotiation Records in ECT</a>
|
||
</h3>
|
||
<p id="section-5.2-1">Capability negotiation events are recorded using the ECT ext
|
||
(extension) claims mechanism:<a href="#section-5.2-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-5.2-2.1">
|
||
<p id="section-5.2-2.1.1">The <strong>ext</strong> claim <span class="bcp14">MUST</span> include a "capability_negotiation" object
|
||
containing the session_id, capability type, and negotiation
|
||
outcome.<a href="#section-5.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-5.2-2.2">
|
||
<p id="section-5.2-2.2.1">Agreement creation and revocation events <span class="bcp14">MUST</span> each produce an
|
||
ECT node with the agreement_id and relevant terms.<a href="#section-5.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-5.2-2.3">
|
||
<p id="section-5.2-2.3.1">Re-negotiation events <span class="bcp14">MUST</span> reference the original agreement_id
|
||
and include both the previous and updated terms.<a href="#section-5.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="security-considerations">
|
||
<section id="section-6">
|
||
<h2 id="name-security-considerations">
|
||
<a href="#section-6" class="section-number selfRef">6. </a><a href="#name-security-considerations" class="section-name selfRef">Security Considerations</a>
|
||
</h2>
|
||
<div id="sybil-resistance">
|
||
<section id="section-6.1">
|
||
<h3 id="name-sybil-resistance">
|
||
<a href="#section-6.1" class="section-number selfRef">6.1. </a><a href="#name-sybil-resistance" class="section-name selfRef">Sybil Resistance</a>
|
||
</h3>
|
||
<p id="section-6.1-1">To prevent an attacker from creating multiple fake agent identities
|
||
to influence consensus outcomes:<a href="#section-6.1-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-6.1-2.1">
|
||
<p id="section-6.1-2.1.1">Agents <span class="bcp14">MUST</span> authenticate using verifiable credentials bound to
|
||
their operational identity.<a href="#section-6.1-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.1-2.2">
|
||
<p id="section-6.1-2.2.1">The leader <span class="bcp14">MUST</span> verify agent identities before accepting votes.<a href="#section-6.1-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.1-2.3">
|
||
<p id="section-6.1-2.3.1">Consensus mechanisms <span class="bcp14">SHOULD</span> incorporate identity verification
|
||
scores that penalize newly registered or unverified agents.<a href="#section-6.1-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.1-2.4">
|
||
<p id="section-6.1-2.4.1">Rate limiting on agent registration prevents rapid creation of
|
||
sybil identities.<a href="#section-6.1-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="byzantine-fault-tolerance-considerations">
|
||
<section id="section-6.2">
|
||
<h3 id="name-byzantine-fault-tolerance-c">
|
||
<a href="#section-6.2" class="section-number selfRef">6.2. </a><a href="#name-byzantine-fault-tolerance-c" class="section-name selfRef">Byzantine Fault Tolerance Considerations</a>
|
||
</h3>
|
||
<p id="section-6.2-1">The consensus mechanisms defined in this document do not provide
|
||
full Byzantine fault tolerance (BFT). Deployments requiring BFT
|
||
guarantees <span class="bcp14">SHOULD</span>:<a href="#section-6.2-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-6.2-2.1">
|
||
<p id="section-6.2-2.1.1">Use weighted consensus with trust scores that reflect agent
|
||
reliability history.<a href="#section-6.2-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.2-2.2">
|
||
<p id="section-6.2-2.2.1">Implement cross-validation of votes through independent
|
||
verification channels.<a href="#section-6.2-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.2-2.3">
|
||
<p id="section-6.2-2.3.1">Set quorum thresholds to at least 2f+1 where f is the maximum
|
||
number of potentially faulty agents.<a href="#section-6.2-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.2-2.4">
|
||
<p id="section-6.2-2.4.1">Consider established BFT protocols (e.g., PBFT) as an
|
||
alternative consensus mechanism for high-security environments.<a href="#section-6.2-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="capability-spoofing">
|
||
<section id="section-6.3">
|
||
<h3 id="name-capability-spoofing">
|
||
<a href="#section-6.3" class="section-number selfRef">6.3. </a><a href="#name-capability-spoofing" class="section-name selfRef">Capability Spoofing</a>
|
||
</h3>
|
||
<p id="section-6.3-1">Agents <span class="bcp14">MUST NOT</span> advertise capabilities they do not possess.
|
||
Mitigations include:<a href="#section-6.3-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-6.3-2.1">
|
||
<p id="section-6.3-2.1.1">Capability advertisements <span class="bcp14">MUST</span> be signed using the agent's
|
||
verified credentials.<a href="#section-6.3-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.3-2.2">
|
||
<p id="section-6.3-2.2.1">Consumers <span class="bcp14">SHOULD</span> validate capability claims through test
|
||
invocations before relying on them for critical operations.<a href="#section-6.3-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.3-2.3">
|
||
<p id="section-6.3-2.3.1">Agents that fail to deliver advertised capabilities <span class="bcp14">MUST</span> have
|
||
their trust scores reduced.<a href="#section-6.3-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.3-2.4">
|
||
<p id="section-6.3-2.4.1">Repeated capability spoofing <span class="bcp14">SHOULD</span> result in exclusion from
|
||
future consensus rounds and negotiation sessions.<a href="#section-6.3-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
<div id="coercion-and-collusion-detection">
|
||
<section id="section-6.4">
|
||
<h3 id="name-coercion-and-collusion-dete">
|
||
<a href="#section-6.4" class="section-number selfRef">6.4. </a><a href="#name-coercion-and-collusion-dete" class="section-name selfRef">Coercion and Collusion Detection</a>
|
||
</h3>
|
||
<p id="section-6.4-1">To detect coordinated manipulation of consensus outcomes:<a href="#section-6.4-1" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-6.4-2.1">
|
||
<p id="section-6.4-2.1.1">Vote patterns <span class="bcp14">SHOULD</span> be analyzed for statistical anomalies
|
||
(e.g., identical rationales, synchronized timing).<a href="#section-6.4-2.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.4-2.2">
|
||
<p id="section-6.4-2.2.1">Agents <span class="bcp14">SHOULD</span> be required to submit votes independently without
|
||
knowledge of other agents' votes until the tally is complete
|
||
(sealed-bid voting).<a href="#section-6.4-2.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.4-2.3">
|
||
<p id="section-6.4-2.3.1">The ECT audit trail enables post-hoc analysis of voting patterns
|
||
to identify potential collusion.<a href="#section-6.4-2.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-6.4-2.4">
|
||
<p id="section-6.4-2.4.1">Human operators <span class="bcp14">SHOULD</span> be notified when anomalous voting patterns
|
||
are detected.<a href="#section-6.4-2.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="iana-considerations">
|
||
<section id="section-7">
|
||
<h2 id="name-iana-considerations">
|
||
<a href="#section-7" class="section-number selfRef">7. </a><a href="#name-iana-considerations" class="section-name selfRef">IANA Considerations</a>
|
||
</h2>
|
||
<div id="consensus-execact-values">
|
||
<section id="section-7.1">
|
||
<h3 id="name-consensus-exec_act-values">
|
||
<a href="#section-7.1" class="section-number selfRef">7.1. </a><a href="#name-consensus-exec_act-values" class="section-name selfRef">Consensus exec_act Values</a>
|
||
</h3>
|
||
<p id="section-7.1-1">This document requests registration of the following exec_act
|
||
values in the ECT exec_act registry:<a href="#section-7.1-1" class="pilcrow">¶</a></p>
|
||
<span id="name-consensus-exec_act-values-2"></span><div id="tab-exec-act">
|
||
<table class="center" id="table-2">
|
||
<caption>
|
||
<a href="#table-2" class="selfRef">Table 2</a>:
|
||
<a href="#name-consensus-exec_act-values-2" class="selfRef">Consensus exec_act Values</a>
|
||
</caption>
|
||
<thead>
|
||
<tr>
|
||
<th class="text-left" rowspan="1" colspan="1">Value</th>
|
||
<th class="text-left" rowspan="1" colspan="1">Description</th>
|
||
<th class="text-left" rowspan="1" colspan="1">Reference</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">consensus_propose</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Agent submits a consensus proposal</td>
|
||
<td class="text-left" rowspan="1" colspan="1">This document</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">consensus_vote</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Agent casts a vote on a proposal</td>
|
||
<td class="text-left" rowspan="1" colspan="1">This document</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-left" rowspan="1" colspan="1">consensus_commit</td>
|
||
<td class="text-left" rowspan="1" colspan="1">Leader commits or aborts a consensus round</td>
|
||
<td class="text-left" rowspan="1" colspan="1">This document</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="capability-type-registry">
|
||
<section id="section-7.2">
|
||
<h3 id="name-capability-type-registry">
|
||
<a href="#section-7.2" class="section-number selfRef">7.2. </a><a href="#name-capability-type-registry" class="section-name selfRef">Capability Type Registry</a>
|
||
</h3>
|
||
<p id="section-7.2-1">This document requests IANA to create a new "Agent Capability
|
||
Types" registry with the following initial entries as defined in
|
||
<a href="#tab-capability-types" class="auto internal xref">Table 1</a>.<a href="#section-7.2-1" class="pilcrow">¶</a></p>
|
||
<p id="section-7.2-2">New entries in this registry require Specification Required
|
||
(per <span>[<a href="#RFC8126" class="cite xref">RFC8126</a>]</span>) and <span class="bcp14">MUST</span> include:<a href="#section-7.2-2" class="pilcrow">¶</a></p>
|
||
<ul class="normal">
|
||
<li class="normal" id="section-7.2-3.1">
|
||
<p id="section-7.2-3.1.1">A unique type identifier.<a href="#section-7.2-3.1.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-7.2-3.2">
|
||
<p id="section-7.2-3.2.1">The capability category.<a href="#section-7.2-3.2.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-7.2-3.3">
|
||
<p id="section-7.2-3.3.1">A human-readable description.<a href="#section-7.2-3.3.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
<li class="normal" id="section-7.2-3.4">
|
||
<p id="section-7.2-3.4.1">A reference to the defining specification.<a href="#section-7.2-3.4.1" class="pilcrow">¶</a></p>
|
||
</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="sec-combined-references">
|
||
<section id="section-8">
|
||
<h2 id="name-references">
|
||
<a href="#section-8" class="section-number selfRef">8. </a><a href="#name-references" class="section-name selfRef">References</a>
|
||
</h2>
|
||
<div id="sec-normative-references">
|
||
<section id="section-8.1">
|
||
<h3 id="name-normative-references">
|
||
<a href="#section-8.1" class="section-number selfRef">8.1. </a><a href="#name-normative-references" class="section-name selfRef">Normative References</a>
|
||
</h3>
|
||
<dl class="references">
|
||
<dt id="I-D.nennemann-agent-dag-hitl-safety">[I-D.nennemann-agent-dag-hitl-safety]</dt>
|
||
<dd>
|
||
<span class="refTitle">"Agent Context Policy Token: DAG Delegation with Human Override"</span>, <span>n.d.</span>, <span><<a href="https://datatracker.ietf.org/doc/draft-nennemann-agent-dag-hitl-safety/">https://datatracker.ietf.org/doc/draft-nennemann-agent-dag-hitl-safety/</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
<dt id="I-D.nennemann-wimse-ect">[I-D.nennemann-wimse-ect]</dt>
|
||
<dd>
|
||
<span class="refTitle">"Execution Context Tokens for Distributed Agentic Workflows"</span>, <span>n.d.</span>, <span><<a href="https://datatracker.ietf.org/doc/draft-nennemann-wimse-ect/">https://datatracker.ietf.org/doc/draft-nennemann-wimse-ect/</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
<dt id="RFC2119">[RFC2119]</dt>
|
||
<dd>
|
||
<span class="refAuthor">Bradner, S.</span>, <span class="refTitle">"Key words for use in RFCs to Indicate Requirement Levels"</span>, <span class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 2119</span>, <span class="seriesInfo">DOI 10.17487/RFC2119</span>, <time datetime="1997-03" class="refDate">March 1997</time>, <span><<a href="https://www.rfc-editor.org/rfc/rfc2119">https://www.rfc-editor.org/rfc/rfc2119</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
<dt id="RFC7515">[RFC7515]</dt>
|
||
<dd>
|
||
<span class="refAuthor">Jones, M.</span>, <span class="refAuthor">Bradley, J.</span>, and <span class="refAuthor">N. Sakimura</span>, <span class="refTitle">"JSON Web Signature (JWS)"</span>, <span class="seriesInfo">RFC 7515</span>, <span class="seriesInfo">DOI 10.17487/RFC7515</span>, <time datetime="2015-05" class="refDate">May 2015</time>, <span><<a href="https://www.rfc-editor.org/rfc/rfc7515">https://www.rfc-editor.org/rfc/rfc7515</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
<dt id="RFC7519">[RFC7519]</dt>
|
||
<dd>
|
||
<span class="refAuthor">Jones, M.</span>, <span class="refAuthor">Bradley, J.</span>, and <span class="refAuthor">N. Sakimura</span>, <span class="refTitle">"JSON Web Token (JWT)"</span>, <span class="seriesInfo">RFC 7519</span>, <span class="seriesInfo">DOI 10.17487/RFC7519</span>, <time datetime="2015-05" class="refDate">May 2015</time>, <span><<a href="https://www.rfc-editor.org/rfc/rfc7519">https://www.rfc-editor.org/rfc/rfc7519</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
<dt id="RFC8174">[RFC8174]</dt>
|
||
<dd>
|
||
<span class="refAuthor">Leiba, B.</span>, <span class="refTitle">"Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words"</span>, <span class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 8174</span>, <span class="seriesInfo">DOI 10.17487/RFC8174</span>, <time datetime="2017-05" class="refDate">May 2017</time>, <span><<a href="https://www.rfc-editor.org/rfc/rfc8174">https://www.rfc-editor.org/rfc/rfc8174</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
<dt id="RFC9110">[RFC9110]</dt>
|
||
<dd>
|
||
<span class="refAuthor">Fielding, R., Ed.</span>, <span class="refAuthor">Nottingham, M., Ed.</span>, and <span class="refAuthor">J. Reschke, Ed.</span>, <span class="refTitle">"HTTP Semantics"</span>, <span class="seriesInfo">STD 97</span>, <span class="seriesInfo">RFC 9110</span>, <span class="seriesInfo">DOI 10.17487/RFC9110</span>, <time datetime="2022-06" class="refDate">June 2022</time>, <span><<a href="https://www.rfc-editor.org/rfc/rfc9110">https://www.rfc-editor.org/rfc/rfc9110</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
</dl>
|
||
</section>
|
||
</div>
|
||
<div id="sec-informative-references">
|
||
<section id="section-8.2">
|
||
<h3 id="name-informative-references">
|
||
<a href="#section-8.2" class="section-number selfRef">8.2. </a><a href="#name-informative-references" class="section-name selfRef">Informative References</a>
|
||
</h3>
|
||
<dl class="references">
|
||
<dt id="I-D.nennemann-agent-gap-analysis">[I-D.nennemann-agent-gap-analysis]</dt>
|
||
<dd>
|
||
<span class="refTitle">"Gap Analysis for Autonomous Agent Protocols"</span>, <span>n.d.</span>, <span><<a href="https://datatracker.ietf.org/doc/draft-nennemann-agent-gap-analysis/">https://datatracker.ietf.org/doc/draft-nennemann-agent-gap-analysis/</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
<dt id="RFC8126">[RFC8126]</dt>
|
||
<dd>
|
||
<span class="refAuthor">Cotton, M.</span>, <span class="refAuthor">Leiba, B.</span>, and <span class="refAuthor">T. Narten</span>, <span class="refTitle">"Guidelines for Writing an IANA Considerations Section in RFCs"</span>, <span class="seriesInfo">BCP 26</span>, <span class="seriesInfo">RFC 8126</span>, <span class="seriesInfo">DOI 10.17487/RFC8126</span>, <time datetime="2017-06" class="refDate">June 2017</time>, <span><<a href="https://www.rfc-editor.org/rfc/rfc8126">https://www.rfc-editor.org/rfc/rfc8126</a>></span>. </dd>
|
||
<dd class="break"></dd>
|
||
</dl>
|
||
</section>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<div id="acknowledgments">
|
||
<section id="appendix-A">
|
||
<h2 id="name-acknowledgments">
|
||
<a href="#name-acknowledgments" class="section-name selfRef">Acknowledgments</a>
|
||
</h2>
|
||
<p id="appendix-A-1">The author thanks the contributors to the NMOP working group
|
||
discussions on AI agent orchestration and multi-agent coordination
|
||
challenges.<a href="#appendix-A-1" class="pilcrow">¶</a></p>
|
||
</section>
|
||
</div>
|
||
<div id="authors-addresses">
|
||
<section id="appendix-B">
|
||
<h2 id="name-authors-address">
|
||
<a href="#name-authors-address" class="section-name selfRef">Author's Address</a>
|
||
</h2>
|
||
<address class="vcard">
|
||
<div dir="auto" class="left"><span class="fn nameRole">Christian Nennemann</span></div>
|
||
<div dir="auto" class="left"><span class="org">Independent Researcher</span></div>
|
||
<div class="email">
|
||
<span>Email:</span>
|
||
<a href="mailto:ietf@nennemann.de" class="email">ietf@nennemann.de</a>
|
||
</div>
|
||
</address>
|
||
</section>
|
||
</div>
|
||
<script>const toc = document.getElementById("toc");
|
||
toc.querySelector("h2").addEventListener("click", e => {
|
||
toc.classList.toggle("active");
|
||
});
|
||
toc.querySelector("nav").addEventListener("click", e => {
|
||
toc.classList.remove("active");
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|