<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Agent Mesh</title><link>https://google.github.io/agentmesh/docs/reference/</link><description>Recent content in Reference on Agent Mesh</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://google.github.io/agentmesh/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>agentmesh-node</title><link>https://google.github.io/agentmesh/docs/reference/agentmesh-node/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://google.github.io/agentmesh/docs/reference/agentmesh-node/</guid><description>&lt;p>&lt;code>agentmesh-node&lt;/code> is the mesh member that runs beside an agent or a service.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">agentmesh-node join [control-plane-url] [flags] enroll and store a credential
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-node run [flags] run the node
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-node forward egress://&amp;lt;name&amp;gt;:&amp;lt;port&amp;gt; [local-addr] forward a local TCP port to a named egress tunnel
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-node reset [--all] [--yes] forget the credential or everything
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-node state export|import &amp;lt;dir&amp;gt; move the identity to or from a state directory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-node skill install|list|show manage the agent skill document
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="files">Files&lt;/h2>
&lt;p>The data directory is &lt;code>--data-dir&lt;/code> if set, otherwise &lt;code>$AGENTMESH_DATA_DIR&lt;/code>,
otherwise the user configuration directory of the operating system
(&lt;code>~/.config/agentmesh&lt;/code> on Linux, &lt;code>~/Library/Application Support/agentmesh&lt;/code> on
macOS). It is created with mode &lt;code>0700&lt;/code> and holds:&lt;/p></description></item><item><title>agentmesh-control-plane</title><link>https://google.github.io/agentmesh/docs/reference/control-plane/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://google.github.io/agentmesh/docs/reference/control-plane/</guid><description>&lt;p>&lt;code>agentmesh-control-plane&lt;/code> admits nodes, mints credentials, holds the mesh policy
and tracks routers. It is an HTTP server over SQLite or PostgreSQL.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">agentmesh-control-plane [flags] run the server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-control-plane admin ban --peer &amp;lt;id&amp;gt; ban a node directly in the database
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-control-plane admin unban --peer &amp;lt;id&amp;gt; lift a ban
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="flags">Flags&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Flag&lt;/th>
 &lt;th>Default&lt;/th>
 &lt;th>Meaning&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>--issuer&lt;/code>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>OIDC issuer URL(s), comma-separated. At least one of &lt;code>--issuer&lt;/code> or &lt;code>--workload-issuer&lt;/code> is required. The first issuer is advertised to enrolling nodes on &lt;code>/info&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--workload-issuer&lt;/code>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>Workload OIDC issuer(s), comma-separated (&lt;code>&amp;lt;issuer&amp;gt;&lt;/code> or &lt;code>&amp;lt;issuer&amp;gt;=&amp;lt;email-suffix&amp;gt;&lt;/code>, such as &lt;code>https://accounts.google.com=.gserviceaccount.com&lt;/code>). Automatically added to &lt;code>--issuer&lt;/code>. Workload tokens can enroll, refresh, and exchange credentials (&lt;code>/register&lt;/code>, &lt;code>/refresh&lt;/code>, &lt;code>/token/exchange&lt;/code>), and are refused at &lt;code>/user/*&lt;/code> and &lt;code>/oauth/authorize&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--allowed-audiences&lt;/code>&lt;/td>
 &lt;td>&lt;code>agentmesh-audience&lt;/code>&lt;/td>
 &lt;td>Audiences accepted in OIDC tokens, comma-separated.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--oidc-client-id&lt;/code>&lt;/td>
 &lt;td>first audience&lt;/td>
 &lt;td>OAuth client ID advertised on &lt;code>/info&lt;/code>, for providers where it differs from the audience.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--insecure-skip-tls-verify&lt;/code>&lt;/td>
 &lt;td>&lt;code>false&lt;/code>&lt;/td>
 &lt;td>Skip TLS verification when fetching issuer metadata and keys. For a cluster issuer served with the cluster CA, or a local development issuer.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--bind-address&lt;/code>&lt;/td>
 &lt;td>&lt;code>0.0.0.0:8080&lt;/code>&lt;/td>
 &lt;td>HTTP listen address.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--db-driver&lt;/code>&lt;/td>
 &lt;td>&lt;code>sqlite&lt;/code>&lt;/td>
 &lt;td>&lt;code>sqlite&lt;/code> or &lt;code>postgres&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--db-dsn&lt;/code>&lt;/td>
 &lt;td>&lt;code>control-plane.db&lt;/code>&lt;/td>
 &lt;td>Database DSN. A PostgreSQL DSN contains a password, so the next two options are preferred for PostgreSQL.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--db-dsn-path&lt;/code>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>File containing the DSN. Overrides &lt;code>--db-dsn&lt;/code>. Can also be set with &lt;code>AGENTMESH_DB_DSN&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--admin-token-path&lt;/code>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>File containing the bearer token for &lt;code>/admin/*&lt;/code> and &lt;code>POST /policies&lt;/code>. Can also be set with &lt;code>AGENTMESH_ADMIN_TOKEN&lt;/code>. Without a token, the admin API cannot be used.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--auto-approve-enrollment&lt;/code>&lt;/td>
 &lt;td>&lt;code>false&lt;/code>&lt;/td>
 &lt;td>Issue credentials for valid bootstrap-token enrollments immediately instead of queueing them for approval.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--biscuit-ttl&lt;/code>&lt;/td>
 &lt;td>&lt;code>24h&lt;/code>&lt;/td>
 &lt;td>Lifetime of each credential. If the OIDC token expires sooner, the credential expires with it.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--oidc-session-ttl&lt;/code>&lt;/td>
 &lt;td>&lt;code>2160h&lt;/code> (90 days)&lt;/td>
 &lt;td>How long a human OIDC enrollment may keep refreshing before the identity must log in again.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--workload-session-ttl&lt;/code>&lt;/td>
 &lt;td>&lt;code>48h&lt;/code>&lt;/td>
 &lt;td>How long a workload OIDC enrollment (&lt;code>--workload-issuer&lt;/code>) may refresh without presenting a fresh platform JWT in &lt;code>TokenRefreshRequest.jwt&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--key-rotation-interval&lt;/code>&lt;/td>
 &lt;td>&lt;code>24h&lt;/code>&lt;/td>
 &lt;td>How often a new signing key is generated. &lt;code>0&lt;/code> disables rotation.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--key-grace-period&lt;/code>&lt;/td>
 &lt;td>&lt;code>1h&lt;/code>&lt;/td>
 &lt;td>How long a rotated-out key stays accepted. Credentials signed by a retired key cannot be verified or refreshed. Nodes and routers must pull &lt;code>/keys&lt;/code> well within this window (&lt;code>agentmesh-node --control-plane-sync-interval&lt;/code>, &lt;code>agentmesh-router --keys-sync-interval&lt;/code>).&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--lease-duration&lt;/code>&lt;/td>
 &lt;td>&lt;code>15m&lt;/code>&lt;/td>
 &lt;td>How long a router lease lasts without renewal.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--node-retention&lt;/code>&lt;/td>
 &lt;td>&lt;code>720h&lt;/code> (30 days)&lt;/td>
 &lt;td>How long the record of an enrolled node is kept after its session expires. Banned nodes are kept forever. &lt;code>0&lt;/code> keeps every record.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--mesh-reconnect-interval&lt;/code>&lt;/td>
 &lt;td>&lt;code>30s&lt;/code>&lt;/td>
 &lt;td>How often the event publisher re-reads the router leases and dials any router it is not connected to.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--log-level&lt;/code>&lt;/td>
 &lt;td>&lt;code>info&lt;/code>&lt;/td>
 &lt;td>&lt;code>debug&lt;/code>, &lt;code>info&lt;/code>, &lt;code>warn&lt;/code>, &lt;code>error&lt;/code>. &lt;code>LOG_FORMAT=json&lt;/code> selects JSON output.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="http-api">HTTP API&lt;/h2>
&lt;p>Every request and response is a message in &lt;code>api/agentmesh.proto&lt;/code>, in one of two
encodings. Routes that mesh components call use binary protobuf
(&lt;code>application/x-protobuf&lt;/code>). Routes for operators and the console use
protojson of the same messages, with proto field names; unknown fields are
rejected. &lt;code>POST /policies&lt;/code> accepts either and answers in the encoding of the
request.&lt;/p></description></item><item><title>agentmesh-router</title><link>https://google.github.io/agentmesh/docs/reference/router/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://google.github.io/agentmesh/docs/reference/router/</guid><description>&lt;p>&lt;code>agentmesh-router&lt;/code> is a libp2p peer with a stable identity that new nodes connect
to first. It hosts the DHT, relays traffic between nodes that cannot reach
each other, and forwards the control plane&amp;rsquo;s signed events. It has no policy
of its own.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">agentmesh-router [flags]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="enrollment">Enrollment&lt;/h2>
&lt;p>A router enrolls like a node, requesting &lt;code>mesh:role:router&lt;/code>, with one of:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Flag&lt;/th>
 &lt;th>Meaning&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>--jwt-path&lt;/code>&lt;/td>
 &lt;td>File containing an OIDC token (a projected service account token, for example).&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--bootstrap-token-path&lt;/code>&lt;/td>
 &lt;td>File containing a bootstrap token minted with &lt;code>&amp;quot;role&amp;quot;: &amp;quot;mesh:role:router&amp;quot;&lt;/code>.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>--oidc-token&lt;/code>, &lt;code>--bootstrap-token&lt;/code>&lt;/td>
 &lt;td>The same tokens as values. Visible in process listings. The file forms are preferred.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>The mesh policy must bind the router&amp;rsquo;s identity to &lt;code>mesh:role:router&lt;/code>. The
&lt;code>agentmesh-p2p&lt;/code> Helm chart handles this: its bootstrap job binds the router&amp;rsquo;s
service account and mints a bootstrap token with &lt;code>max_usages&lt;/code> equal to the
replica count.&lt;/p></description></item><item><title>agentmesh-one</title><link>https://google.github.io/agentmesh/docs/reference/agentmesh-one/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://google.github.io/agentmesh/docs/reference/agentmesh-one/</guid><description>&lt;p>&lt;code>agentmesh-one&lt;/code> runs a control plane, a router and the web console in one process
on one port. The router&amp;rsquo;s libp2p transport is WebSocket on the same port as
the HTTP API, so a node needs only one &lt;code>https&lt;/code> URL. The same binary is also
the admin client for a running instance.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">agentmesh-one [flags] run the mesh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-one token create|list|revoke|qr manage bootstrap tokens on a running instance
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">agentmesh-one admin ban &amp;lt;peer-id&amp;gt; ban a node
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="files">Files&lt;/h2>
&lt;p>Everything lives in &lt;code>--data-dir&lt;/code> (default &lt;code>.&lt;/code>): &lt;code>agentmesh.db&lt;/code> (SQLite), the
router key, &lt;code>join-token&lt;/code> and &lt;code>admin-token&lt;/code> when generated, and &lt;code>bin/&lt;/code> for a
downloaded tunnel connector.&lt;/p></description></item><item><title>Node configuration file</title><link>https://google.github.io/agentmesh/docs/reference/node-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://google.github.io/agentmesh/docs/reference/node-config/</guid><description>&lt;p>&lt;code>agentmesh-node.yaml&lt;/code> declares what a node is (labels), what it publishes
(services), what it requires from callers (attenuation) and what it requires
from providers (egress). Both &lt;code>agentmesh-node join&lt;/code> and &lt;code>agentmesh-node run&lt;/code> read it from
&lt;code>--config&lt;/code>, by default &lt;code>./agentmesh-node.yaml&lt;/code>. A missing file means an empty
configuration. Unknown keys are an error, because a typo under &lt;code>attenuation&lt;/code>
would otherwise weaken the node without notice.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;v1alpha1&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">region&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">eu-west-1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">team&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">platform&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mcp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">code-reviewer&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Reviews diffs&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">target_url&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;http://127.0.0.1:7777/mcp&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mcp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">filesystem&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">command&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;npx&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;-y&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;@modelcontextprotocol/server-filesystem&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;/srv/docs&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">NODE_OPTIONS&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;--max-old-space-size=256&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">inference&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">vllm&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">target_url&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;http://127.0.0.1:8000&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">target_auth_path&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">/etc/agentmesh/vllm-key&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">a2a&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">triage&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">target_url&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;http://127.0.0.1:9999&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">attenuation&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;maintenance() &amp;lt;- time($t), $t &amp;gt; 2026-12-31T00:00:00Z;&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">checks&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;check if label(&amp;#34;team&amp;#34;, &amp;#34;platform&amp;#34;);&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">policies&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;deny if service(&amp;#34;mcp&amp;#34;, &amp;#34;filesystem&amp;#34;), group(&amp;#34;contractors&amp;#34;);&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;deny if maintenance();&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">egress&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">require_labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">jurisdiction&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">eu&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="version">&lt;code>version&lt;/code>&lt;/h2>
&lt;p>&lt;code>&amp;quot;v1alpha1&amp;quot;&lt;/code>, or omitted (read as &lt;code>v1alpha1&lt;/code>). A node refuses a version it
does not know.&lt;/p></description></item><item><title>Mesh policy</title><link>https://google.github.io/agentmesh/docs/reference/policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://google.github.io/agentmesh/docs/reference/policy/</guid><description>&lt;p>The mesh policy is one document held by the control plane: a list of roles,
a list of bindings and a list of egress destinations. It is posted as JSON
(protojson of &lt;code>PolicyConfig&lt;/code> in &lt;code>api/agentmesh.proto&lt;/code>) to &lt;code>POST /policies&lt;/code>, read
back from &lt;code>GET /admin/policy&lt;/code>, edited in the console, or given to
&lt;code>agentmesh-one --policy-file&lt;/code> for first boot.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;roles&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;mesh:role:node&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;allowed_services&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;system://mesh.catalog&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;allowed_labels&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;region=*&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;team=platform&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;developer&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;allowed_services&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;mcp://code-reviewer&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;mcp://build-runner.*&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;inference://*&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;allowed_targets&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;group:dev-nodes&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;node:12D3KooWSpecialNode&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;custom_datalog&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;tier(\&amp;#34;standard\&amp;#34;);&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;analyst&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;allowed_services&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;egress://bigquery.googleapis.com&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;allowed_targets&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;*&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;http&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;service&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;egress://bigquery.googleapis.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;methods&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;GET&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;POST&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="nt">&amp;#34;paths&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;/bigquery/v2/projects/my-proj/datasets/*&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;bindings&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;mesh:role:node&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;members&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;group:engineering&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;user:system:serviceaccount:agentmesh-nodes:calc-mcp-agentmesh-node&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;developer&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;members&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;group:engineering&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;analyst&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;members&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;group:analytics&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;egress&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bigquery.googleapis.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;served_by&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;site=eu&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;broker&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;oidc_federation&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;token_endpoint&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://sts.googleapis.com/v1/token&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;audience&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;//iam.googleapis.com/projects/123/locations/global/workloadIdentityPools/agentmesh/providers/agentmesh-cp&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;scopes&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;https://www.googleapis.com/auth/bigquery.readonly&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The whole document is replaced on every post. Unknown fields are rejected,
so a misspelt key fails the request instead of dropping a grant without
notice.&lt;/p></description></item><item><title>Node API</title><link>https://google.github.io/agentmesh/docs/reference/node-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://google.github.io/agentmesh/docs/reference/node-api/</guid><description>&lt;p>The local API that &lt;code>agentmesh-node run&lt;/code> serves to agents, gateways, and scripts on
the same machine or cluster. It is available on TCP (&lt;code>--bind-addr&lt;/code>, default
&lt;code>127.0.0.1:8080&lt;/code>) and on a Unix socket (&lt;code>--socket-path&lt;/code>, default
&lt;code>&amp;lt;data-dir&amp;gt;/agentmesh.sock&lt;/code>). The Envoy &lt;code>ext_authz&lt;/code> and &lt;code>ext_proc&lt;/code> endpoints are
served on the same listeners.&lt;/p>
&lt;h2 id="authentication">Authentication&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Listener&lt;/th>
 &lt;th>Requirement&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>TCP (&lt;code>--bind-addr&lt;/code>)&lt;/td>
 &lt;td>&lt;code>X-Mesh-Authentication: Bearer &amp;lt;token&amp;gt;&lt;/code> on every request, or &lt;code>Authorization: Bearer &amp;lt;token&amp;gt;&lt;/code> on non-proxy endpoints (&lt;code>/mcp&lt;/code>, &lt;code>/v1/*&lt;/code>, &lt;code>/egress/*&lt;/code>, &lt;code>/oauth/*&lt;/code>), or a client certificate when &lt;code>--tls-ca&lt;/code> is set.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Unix socket (&lt;code>--socket-path&lt;/code>)&lt;/td>
 &lt;td>None required for node-level access (the socket has mode &lt;code>0600&lt;/code>). A caller may still pass an Agent Mesh Task Biscuit or platform JWT in &lt;code>X-Mesh-Authentication&lt;/code> or &lt;code>Authorization&lt;/code> to scope the request to that caller&amp;rsquo;s identity and task rules.&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>The bearer &lt;code>&amp;lt;token&amp;gt;&lt;/code> accepted by &lt;code>agentmesh-node&lt;/code> can be:&lt;/p></description></item></channel></rss>