<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://personal-agent-protocol.datalayer.tech/blog</id>
    <title>🤖 🌸 Personal Agent Protocol Blog</title>
    <updated>2026-10-12T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://personal-agent-protocol.datalayer.tech/blog"/>
    <subtitle>🤖 🌸 Personal Agent Protocol Blog</subtitle>
    <icon>https://personal-agent-protocol.datalayer.tech/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Personal Agent Protocol 0.11: complete Python and TypeScript SDKs]]></title>
        <id>https://personal-agent-protocol.datalayer.tech/blog/personal-agent-protocol-0.11</id>
        <link href="https://personal-agent-protocol.datalayer.tech/blog/personal-agent-protocol-0.11"/>
        <updated>2026-10-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Personal Agent Protocol (PAP) lets a]]></summary>
        <content type="html"><![CDATA[<p>The <a href="https://personalagentprotocol.org/" target="_blank" rel="noopener noreferrer" class="">Personal Agent Protocol</a> (PAP) lets a
person's own agent discover a company's agent and work with it on the
person's behalf, while the company keeps its identity, sign-in, data, and
actions. Version 0.11.0 of our SDKs is the first complete implementation of
PAP in both Python and TypeScript: both roles, the personal agent and the
company, released together at the same version.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-0110-ships">What 0.11.0 ships<a href="https://personal-agent-protocol.datalayer.tech/blog/personal-agent-protocol-0.11#what-0110-ships" class="hash-link" aria-label="Direct link to What 0.11.0 ships" title="Direct link to What 0.11.0 ships" translate="no">​</a></h2>
<p>Both SDKs implement <a href="https://personalagentprotocol.org/docs/spec" target="_blank" rel="noopener noreferrer" class="">PAP draft 0.1</a>
(the specification as of 2026-10-09) and the Operations extension v1. The
same features exist in each language.</p>
<p><strong>As a personal agent:</strong></p>
<ul>
<li class=""><strong>Discovery</strong> of a company's <code>/.well-known/poppy.json</code> and its OAuth
metadata, with the domain and issuer relationship checked, strict JSON
(duplicate members refused), and bounded redirects, bytes, and time.</li>
<li class=""><strong>Identity:</strong> your agent's client metadata and keys, signed client and
Session assertions (ES256 or RS256), and pairwise user IDs so a company never
learns who the person is elsewhere.</li>
<li class=""><strong>Sessions</strong> that start signed out, with DPoP-bound tokens (a fresh proof
per request and retry) and renewal.</li>
<li class=""><strong>Consent:</strong> Direct, Device, and Mediated Sign-In, with the person's
credentials kept between them and the company (protected input never reaches
a model), and Account Tokens that rotate on every refresh, narrow, and
revoke.</li>
<li class=""><strong>Conversations</strong> with idempotent messages, ordered event polling, SSE
streaming, handoff, Direct Conversations, and closing.</li>
<li class=""><strong>Operations:</strong> a company proposes a consequential action as a revisioned
operation; the person approves that exact revision; the agent confirms it,
and it is performed at most once. Standing permissions, with term-by-term
bounds, are operations the person approves too.</li>
<li class=""><strong>APIs:</strong> OpenAPI and MCP clients; MCP uses a Bearer token bound to that one
server's URL, DPoP is required everywhere else.</li>
</ul>
<p><strong>As a company:</strong></p>
<ul>
<li class="">A reference company assembled from <a href="https://github.com/datalayer/reactor" target="_blank" rel="noopener noreferrer" class="">Reactor</a>
contributions, served over ASGI in Python and <code>node:http(s)</code> in TypeScript:
discovery, Sessions, the three sign-in modes, Account Tokens,
conversations, an OpenAPI API and an MCP endpoint, browser sessions with
operation pages, and Operations.</li>
<li class="">Everything it remembers lives in one store contract (<code>pap.company.store</code>),
with a kit that checks a backend against it (<code>check_store</code>, <code>checkStore</code>).
The replay cache lives in that store, so replicas sharing a store share it.</li>
</ul>
<p><strong>For both:</strong></p>
<ul>
<li class=""><strong>Telemetry</strong>, redacted by construction: one event per discovery, Session,
sign-in, conversation, and operation stage, to a <code>pap.telemetry</code> sink, with
an OpenTelemetry adapter.</li>
<li class=""><strong>Security hardening:</strong> 0.10.0 followed an independent review of both SDKs.
Its fixes include attempt limits on Mediated Sign-In, a replay cache shared
through the company store, SSRF defences that resolve and pin every address
(now in TypeScript too, with <code>createResolvingFetch</code>), bounded response reads,
and no request body re-sent to a redirect. Canary suites in both languages
check that no credential reaches a log, an error, a URL, a trace, or a
model. What is still open is listed on <a class="" href="https://personal-agent-protocol.datalayer.tech/security/review/">Open security
points</a>.</li>
<li class=""><strong>Conformance:</strong> a requirement ledger of the draft's MUSTs and SHOULDs, a
conformance runner (<code>pap conformance run</code>), and the four language pairings
(a Python or TypeScript agent with a Python or TypeScript company), each
passing all 91 cases in the <a class="" href="https://personal-agent-protocol.datalayer.tech/protocol/conformance-report/">conformance report</a>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="install">Install<a href="https://personal-agent-protocol.datalayer.tech/blog/personal-agent-protocol-0.11#install" class="hash-link" aria-label="Direct link to Install" title="Direct link to Install" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">pip install personal-agent-protocol</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">npm install @datalayer/personal-agent-protocol</span><br></div></code></pre></div></div>
<p>Python 3.10 or later. The <code>ui</code>, <code>telemetry</code>, and <code>server</code> extras add the
sign-in displays, the OpenTelemetry adapter, and serving over real sockets.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="both-roles-in-a-few-lines">Both roles in a few lines<a href="https://personal-agent-protocol.datalayer.tech/blog/personal-agent-protocol-0.11#both-roles-in-a-few-lines" class="hash-link" aria-label="Direct link to Both roles in a few lines" title="Direct link to Both roles in a few lines" translate="no">​</a></h2>
<p>A company and a personal agent discovering it, in one process. Python:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> asyncio</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> httpx</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> personal_agent_protocol </span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> DiscoveryClient</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> personal_agent_protocol</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">company </span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> CompanyConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> build_company</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> company_app</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">public_address</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">host</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">str</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">list</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">str</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">"93.184.216.34"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># a stand-in for DNS in this in-process run</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">main</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">None</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    config </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> CompanyConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        name</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">"Example Shop"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        domain</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">"shop.example"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        scopes</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"orders:read"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"orders:write"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        write_scopes</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"orders:write"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">with</span><span class="token plain"> httpx</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">AsyncClient</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> outbound</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        company </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> company_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">build_company</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">config</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> http_client</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">outbound</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        network </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> httpx</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">AsyncClient</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">transport</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">httpx</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ASGITransport</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">app</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">company</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">with</span><span class="token plain"> DiscoveryClient</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">http_client</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">network</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> address_resolver</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">public_address</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> client</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            discovered </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">discover</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"shop.example"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">discovered</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">document</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Example Shop</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">discovered</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">document</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">auth</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">issuer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># https://shop.example</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">asyncio</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">main</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<p>TypeScript (Node), with a <code>fetch</code> that hands every request to the company:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> buildPapReactor</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> discoverCompany </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"@datalayer/personal-agent-protocol"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> CompanyConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> buildCompany </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"@datalayer/personal-agent-protocol/server"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> company </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">buildCompany</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">CompanyConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    name</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Example Shop"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    domain</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"shop.example"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    scopes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">"orders:read"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"orders:write"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    writeScopes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">"orders:write"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">network</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> RequestInfo </span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">URL</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> init</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> RequestInit </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> request </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Request</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> init</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> answer </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> company</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">handle</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    method</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> request</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">method</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    url</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> request</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    headers</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fromEntries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">request</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">headers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> Response</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">json</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">answer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">body</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> status</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> answer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">status</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> headers</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> answer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">headers </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> reactor </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">buildPapReactor</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> fetch</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> network </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> discovered </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">discoverCompany</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"shop.example"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> reactor </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">discovered</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">document</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Example Shop</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">discovered</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">document</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">auth</span><span class="token operator" style="color:rgb(137, 221, 255)">?.</span><span class="token plain">issuer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// https://shop.example</span><br></div></code></pre></div></div>
<p>A real company adds its account directory, its agent, and one executor per
action as Reactor plugins; a real personal agent adds its signer, token store,
and browser handoff. The <a class="" href="https://personal-agent-protocol.datalayer.tech/guides/company/">company guide</a> and the <a class="" href="https://personal-agent-protocol.datalayer.tech/guides/personal-agent/">personal
agent guide</a> go through each.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="start-here">Start here<a href="https://personal-agent-protocol.datalayer.tech/blog/personal-agent-protocol-0.11#start-here" class="hash-link" aria-label="Direct link to Start here" title="Direct link to Start here" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://personal-agent-protocol.datalayer.tech/getting-started/">Getting started</a>, the <a class="" href="https://personal-agent-protocol.datalayer.tech/sdk/python/">Python SDK</a>, and
the <a class="" href="https://personal-agent-protocol.datalayer.tech/sdk/typescript/">TypeScript SDK</a>.</li>
<li class=""><a class="" href="https://personal-agent-protocol.datalayer.tech/examples/">Examples</a>: a user with a company (Ada's agent exchanging a
jacket at Manzanita, from a first question to a confirmed operation) and two
companies (Ledgerly paying invoices at Northwind Bank), each runnable with
<a href="https://github.com/datalayer/personal-agent-protocol/tree/main/examples/pydantic-ai" target="_blank" rel="noopener noreferrer" class="">Pydantic AI</a>
and <a href="https://github.com/datalayer/agent-runtimes/tree/main/examples/personal-agent-protocol" target="_blank" rel="noopener noreferrer" class="">Agent Runtimes</a>.</li>
<li class=""><a class="" href="https://personal-agent-protocol.datalayer.tech/guides/operations/">Operations</a>, <a class="" href="https://personal-agent-protocol.datalayer.tech/guides/telemetry/">Telemetry</a>, and
<a class="" href="https://personal-agent-protocol.datalayer.tech/security/">Security</a>.</li>
<li class="">The <a href="https://github.com/datalayer/personal-agent-protocol/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="">changelog</a>
and <a class="" href="https://personal-agent-protocol.datalayer.tech/releases/compatibility/">compatibility</a>. PAP is a draft, so the SDKs
stay <code>0.x</code>: a minor release may change the API, and the <a class="" href="https://personal-agent-protocol.datalayer.tech/releases/migration/">migration
guide</a> says how.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="in-the-datalayer-platform">In the Datalayer platform<a href="https://personal-agent-protocol.datalayer.tech/blog/personal-agent-protocol-0.11#in-the-datalayer-platform" class="hash-link" aria-label="Direct link to In the Datalayer platform" title="Direct link to In the Datalayer platform" translate="no">​</a></h2>
<p>We are now integrating PAP in the Datalayer platform, in its two roles.
Applications built in Datalayer Studio will act as a person's agent at
companies: connect a company by its domain, start signed out, ask the person
to sign in only when needed, and show each consequential action as one
proposal the person approves. And applications published from Datalayer will
be PAP companies: on their own domain, with a company agent, APIs, MCP, and
Operations that personal agents can reach. The <a class="" href="https://personal-agent-protocol.datalayer.tech/studio/integration/">Studio
integration</a> page describes the plan.</p>
<p>Questions and interoperability reports are welcome on
<a href="https://github.com/datalayer/personal-agent-protocol/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content>
        <author>
            <name>Eric Charles</name>
            <uri>https://github.com/echarles</uri>
        </author>
        <category label="release" term="release"/>
        <category label="python" term="python"/>
        <category label="typescript" term="typescript"/>
    </entry>
</feed>